Name: series-workflow2bzqd Phase: Succeeded StartedAt: 2026-07-10 16:25:16 +0000 UTC FinishedAt: 2026-07-10 18:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[0] Phase: Succeeded StartedAt: 2026-07-10 16:25:16 +0000 UTC FinishedAt: 2026-07-10 16:43:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 16:25:16 +0000 UTC FinishedAt: 2026-07-10 16:43:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6d86ce0da0d5631721c142ea9bb5499cc129b347", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6d86ce0da0d5631721c142ea9bb5499cc129b347", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART" ], "series_id": "85511d49-3b92-4127-a745-9b557f5ff2fe" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtpse_mcu_port_get_admin_state", "rtpse_mcu_port_get_pw_status", "rtpse_mcu_port_get_pw_class", "rtpse_mcu_port_get_actual_pw", "rtpse_mcu_port_get_voltage", "rtpse_mcu_port_enable", "rtpse_mcu_port_disable", "rtpse_mcu_port_get_pw_limit", "rtpse_mcu_port_set_pw_limit", "rtpse_mcu_port_get_pw_limit_ranges", "rtpse_mcu_port_get_prio", "rtpse_mcu_port_set_prio", "rtpse_mcu_do_xfer", "rtpse_mcu_i2c_smbus_send", "rtpse_mcu_i2c_smbus_recv", "rtpse_mcu_i2c_native_send", "rtpse_mcu_i2c_native_recv", "rtpse_mcu_uart_receive", "rtpse_mcu_uart_send", "rtpse_mcu_uart_recv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2RvX3hmZXImIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfc21idXNfcmVjdiYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRmNDhmNGJmY2RmYTMwZTUyN2RlZjQ0ZGFhMmZmYTlkN2FjOWRmMTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAxNjo0MjoyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczMzMwNjE5M2RiNTdlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTc2IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogUmVhbHRlayBQU0UgTUNVXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOiB8XG4mIzQzOyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudClcbiYjNDM7ICBoYXJkd2FyZSBvbiBhIHJhbmdlIG9mIG1hbmFnZWQgUG9FIHN3aXRjaGVzLiBUaGUgaG9zdCBDUFUgdGFsa3Mgb25seSB0b1xuJiM0MzsgIHRoaXMgTUNVIC0gb3ZlciBJMkMvU01CdXMgb3IgVUFSVCAtIHVzaW5nIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDtcbiYjNDM7ICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkXG4mIzQzOyAgZGlyZWN0bHkuIEZvciBleGFtcGxlLCBvbiB0aGUgWnl4ZWwgR1MxOTAwLTEwSFAgdGhlIFNvQyByZWFjaGVzIHRoZSBNQ1VcbiYjNDM7ICBvdmVyIFVBUlQsIGFuZCB0aGUgTUNVIG1hbmFnZXMgdGhlIG9uLWJvYXJkIFBTRSBjaGlwLlxuJiM0MztcbiYjNDM7ICBUaGlzIGJpbmRpbmcgZGVzY3JpYmVzIHRoZSBNQ1UgdG9nZXRoZXIgd2l0aCBpdHMgUmVhbHRlayBmaXJtd2FyZTogdGhlXG4mIzQzOyAgZmlybXdhcmUgYW5kIGl0cyBob3N0IHByb3RvY29sLCB3aGljaCBhcmUgc3RhYmxlIGFjcm9zcyBib2FyZHMuIFRoZVxuJiM0MzsgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGVcbiYjNDM7ICBQU0Ugc2lsaWNvbiBiZWhpbmQgdGhlIE1DVSAoUmVhbHRlayBSVEw4MjN4L1JUTDgyMzkqIG9yIEJyb2FkY29tXG4mIzQzOyAgQkNNNTl4eHgpIGlzIHJlcG9ydGVkIGJ5IHRoZSBNQ1UgYW5kIGRldGVjdGVkIGF0IHJ1bnRpbWUgLSBuZWl0aGVyIGlzXG4mIzQzOyAgbmFtZWQgaGVyZS5cbiYjNDM7XG4mIzQzOyAgVHdvIHByb3RvY29sIGdlbmVyYXRpb25zIGV4aXN0LCBib3RoIFJlYWx0ZWsmIzM5O3M6XG4mIzQzOyAgICBnZW4xICBvbGRlciBib2FyZHMsIHdoZXJlIHRoZSBNQ1UgZnJvbnRzIEJyb2FkY29tIFBTRSBzaWxpY29uXG4mIzQzOyAgICBnZW4yICB0aGUgYWx0ZXJlZCBwcm90b2NvbCB1c2VkIHdpdGggUmVhbHRlayYjMzk7cyBvd24gUFNFIHNpbGljb25cbiYjNDM7XG4mIzQzOyAgT24gYW4gSTJDIGF0dGFjaG1lbnQgdGhlIGZyYW1pbmcgdGhlIE1DVSBmaXJtd2FyZSBleHBlY3RzIGlzIHBhcnQgb2YgdGhlXG4mIzQzOyAgY29tcGF0aWJsZTogJiMzOTstc21idXMmIzM5OyAocmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSBhbmQgYSByZXBlYXRlZFxuJiM0MzsgIHN0YXJ0KSBvciAmIzM5Oy1pMmMmIzM5OyAoYmFyZSBibG9jayB3cml0ZXMgYW5kIHJlYWRzKS4gQSBVQVJUIGF0dGFjaG1lbnQgY2Fycmllc1xuJiM0MzsgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJiMzOTtzZXJpYWwmIzM5OyBub2RlLlxuJiM0MztcbiYjNDM7ICBFYWNoIGJvYXJkIGFkZGl0aW9uYWxseSBjYXJyaWVzIGEgZGV2aWNlLXNwZWNpZmljIGNvbXBhdGlibGUgdGhhdCBmYWxsc1xuJiM0MzsgIGJhY2sgdG8gb25lIG9mIHRoZSBwcm90b2NvbCBjb21wYXRpYmxlcyBhYm92ZS4gRHJpdmVycyBiaW5kIG9uIHRoZVxuJiM0MzsgIHByb3RvY29sIGNvbXBhdGlibGU7IHRoZSBkZXZpY2Utc3BlY2lmaWMgc3RyaW5nIGlkZW50aWZpZXMgdGhlIGJvYXJkIGFuZFxuJiM0MzsgIHJlc2VydmVzIGEgcGxhY2UgZm9yIGEgZnV0dXJlIHBlci1ib2FyZCBxdWlyayB3aXRob3V0IGhhdmluZyB0byByZXRyb2ZpdFxuJiM0MzsgIGRldmljZSB0cmVlcyBhbHJlYWR5IGluIHRoZSBmaWVsZC5cbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIG9uZU9mOlxuJiM0MzsgICAgICAjIFVBUlRcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkwMC0xMGhwLWExLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjFcbiYjNDM7XG4mIzQzOyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nXG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MjAtMjRocC12Mi1wc2VcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4mIzQzO1xuJiM0MzsgICAgICAjIFVBUlRcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkwMC0xMGhwLWIxLXBzZVxuJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwseG1nMTkxNS0xMGVwLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjJcbiYjNDM7XG4mIzQzOyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nXG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCx4czE5MzAtMTJocC1wc2VcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXG4mIzQzO1xuJiM0MzsgICAgICAjIEkyQywgcmF3IGZyYW1pbmdcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIGxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHBvd2VyLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBSZWd1bGF0b3Igc3VwcGx5aW5nIHRoZSBQb0UgcG93ZXIgcmFpbC5cbiYjNDM7XG4mIzQzOyAgZW5hYmxlLWdwaW9zOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sI1xuJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvc2VyaWFsL3NlcmlhbC1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXG4mIzQzOyAgIyBBICYjMzk7LXNtYnVzJiMzOTsvJiMzOTstaTJjJiMzOTsgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICYjMzk7cmVnJiMzOTsgYW5kXG4mIzQzOyAgIyBjYW5ub3QgY2Fycnkgc2VyaWFsIGJ1cyBwcm9wZXJ0aWVzLiBBIGJhcmUgZ2VuIGNvbXBhdGlibGUgaXMgYSBVQVJUXG4mIzQzOyAgIyBhdHRhY2htZW50OiBubyAmIzM5O3JlZyYjMzk7LCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIHJlZ1xuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXG4mIzQzOyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6IGZhbHNlXG4mIzQzO1xuJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudFxuJiM0MzsgIC0gfFxuJiM0MzsgICAgaTJjIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7enl4ZWwseHMxOTMwLTEyaHAtcHNlXCYjMzQ7LCBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBpMmMge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcJiMzNDssIFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBVQVJUIGF0dGFjaG1lbnRcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIHNlcmlhbCB7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3p5eGVsLGdzMTkwMC0xMGhwLWExLXBzZVwmIzM0OywgXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjFcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSBcdTAwM2MxOTIwMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uM2IyMWU0NmJlNjhhMWYgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0yMjcxNiw2ICYjNDM7MjI3MTYsMTMgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0aW5jbHVkZS9zb3VuZC9ydCouaFxuIEY6XHRzb3VuZC9zb2MvY29kZWNzL3J0KlxuIFxuJiM0MztSRUFMVEVLIFBTRSBNQ1UgRFJJVkVSXG4mIzQzO006XHRKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuJiM0MztGOlx0ZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdSpcbiYjNDM7XG4gUkVBTFRFSyBPVFRPIFdBVENIRE9HXG4gTTpcdFNhbmRlciBWYW5oZXVsZSBcdTAwM2NzYW5kZXJAc3ZhbmhldWxlLm5ldFx1MDAzZVxuIEw6XHRsaW51eC13YXRjaGRvZ0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG5pbmRleCA3ZWYyOTY1N2VlNWRkMS4uYTBmMmFlNjY4YzY3YzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbkBAIC0xMyw2ICYjNDM7MTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuIFxuIGlmIFBTRV9DT05UUk9MTEVSXG4gXG4mIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VcbiYjNDM7XHR0cmlzdGF0ZVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVIGRyaXZlci4gVGhpcyBpcyBzZWxlY3RlZFxuJiM0MztcdCAgYXV0b21hdGljYWxseSBieSB0aGUgdHJhbnNwb3J0IG9wdGlvbnMgYmVsb3cuXG4mIzQzO1xuJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVX0kyQ1xuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkNcbiYjNDM7XHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0VcbiYjNDM7XHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxuJiM0MztcdCAgdmlhIEkyQy9TTUJ1cy4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbFxuJiM0MztcdCAgUFNFIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbiYjNDM7XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLlxuJiM0MztcbiYjNDM7Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xuJiM0MztcdHNlbGVjdCBQU0VfUkVBTFRFS19NQ1VcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuJiM0MztcdCAgaGFyZHdhcmUgb24gdmFyaW91cyBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMsIGF0dGFjaGVkXG4mIzQzO1x0ICB2aWEgVUFSVC4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbCBQU0VcbiYjNDM7XHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbiYjNDM7XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC5cbiYjNDM7XG4gY29uZmlnIFBTRV9SRUdVTEFUT1JcbiBcdHRyaXN0YXRlIFwmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwmIzM0O1xuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuaW5kZXggY2M3OGY3ZWE3ZjVmNzEuLjljY2E1OTAwZmUzNDIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbkBAIC0zLDYgJiM0MzszLDkgQEBcbiBcbiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vXG4gXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtY29yZS5vXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVCkgJiM0Mzs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgJiM0Mzs9IHBzZV9yZWd1bGF0b3Iub1xuIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAub1xuIG9iai0kKENPTkZJR19QU0VfU0kzNDc0KSAmIzQzOz0gc2kzNDc0Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBhNWJiNzg0MzYwYTVlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xuQEAgLTAsMCAmIzQzOzEsOTkzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSBmcm9udGluZyBQU0Ugc2lsaWNvbiBvbiB2YXJpb3VzXG4mIzQzOyAqIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcy4gVGhlIE1DVSBzcGVha3MgYSAxMi1ieXRlIGZpeGVkLWZyYW1lXG4mIzQzOyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlXG4mIzQzOyAqIHByb3RvY29sIHZpYSBhIHBlci1kaWFsZWN0IG9wY29kZSB0YWJsZSBhbmQgcmVzcG9uc2UgcGFyc2Vycy5cbiYjNDM7ICpcbiYjNDM7ICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGVcbiYjNDM7ICogYWN0dWFsIFBTRSBzaWxpY29uOiB0aGUgaG9zdCBDUFUgdGFsa3MgdG8gdGhlIE1DVSBvdmVyIEkyQy9TTUJ1cyBvclxuJiM0MzsgKiBVQVJULCBhbmQgdGhlIE1DVSBpbiB0dXJuIG1hbmFnZXMgdGhlIFBTRSBjaGlwcyBvbiB0aGUgYm9hcmQuIFRoZSBNQ1VcbiYjNDM7ICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbC4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3RcbiYjNDM7ICogYWNjZXNzZWQgZGlyZWN0bHk7IGV2ZXJ5dGhpbmcgZ29lcyB0aHJvdWdoIE1DVSBjb21tYW5kcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLlxuJiM0MzsgKiBUd28gZ2VuZXJhdGlvbnMgYXJlIHN1cHBvcnRlZDogR2VuMSBiZWluZyB1c2VkIG9uIG9sZGVyIHN3aXRjaGVzIHdoZXJlXG4mIzQzOyAqIHRoZSBNQ1UgZnJvbnRzIGFuZCBtYW5hZ2VzIEJyb2FkY29tIFBTRSBzaWxpY29uOyBHZW4yIGJlaW5nIHVzZWQgd2l0aFxuJiM0MzsgKiBSZWFsdGVrIFBTRSBzaWxpY29uLiBUaGUgdHdvIHNoYXJlIGZyYW1lIGZvcm1hdCBhbmQgYSBzdW0tbW9kLTI1NlxuJiM0MzsgKiBjaGVja3N1bSBidXQgZGl2ZXJnZSBvbiBvcGNvZGUgbnVtYmVycyBhbmQgb24gYSBmZXcgcmVzcG9uc2UgbGF5b3V0cztcbiYjNDM7ICogdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwZXItZGlhbGVjdCBvcGNvZGUgdGFibGUgYW5kIHBhcnNlciBob29rcy5cbiYjNDM7ICpcbiYjNDM7ICogT3V0IG9mIHNjb3BlOiBQU0UgY2hpcHMgdGhhdCBhcmUgaW50ZXJmYWNlZCBkaXJlY3RseSBmcm9tIHRoZSBob3N0XG4mIzQzOyAqIHdpdGhvdXQgYSBtYW5hZ2VtZW50IE1DVSwgTUNVIGRlc2lnbnMgdGhhdCBzcGVhayBhbiB1bnJlbGF0ZWQgcHJvdG9jb2xcbiYjNDM7ICogZmFtaWx5LCBhbmQgXCYjMzQ7ZHVtYiBQU0VcJiMzNDsgbW9kZXMgd2hlcmUgbm8gaG9zdCBjb250cm9sIGlzIHdpcmVkIHVwIGF0IGFsbC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBjb3JlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCwgZGVjb2RpbmcvZW5jb2Rpbmcgb2YgTUNVXG4mIzQzOyAqIHJlc3BvbnNlcywgYW5kIHRoZSBwc2VfY29udHJvbGxlcl9vcHMgaW50ZWdyYXRpb24uIFRyYW5zcG9ydCBtb2R1bGVzXG4mIzQzOyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2XG4mIzQzOyAqIGNhbGxiYWNrcy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlubWF4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JlYWx0ZWstcHNlLW1jdS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcdFx0MHgwMTM4XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5XHRcdDB4MDAzOVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUNcdFx0MHgwMTM5XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVx0XHQweGUxMTFcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxXHRcdDB4ZTEyMVxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRURcdFx0MHgwMFxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkdcdFx0MHgwMVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HXHRcdDB4MDJcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVFx0XHRcdDB4MDNcdC8qIEdlbjEtb25seTsgcmVzZXJ2ZWQgb24gR2VuMiAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVFx0XHQweDA0XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUXHRcdDB4MDVcdC8qIEdlbjEtb25seTsgcmVzZXJ2ZWQgb24gR2VuMiAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HXHRcdDB4MDZcbiYjNDM7XG4mIzQzOy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlx0MHgwMlxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTUFYX1BPUlRTXHRcdFx0NDhcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFlcdFx0M1xuJiM0MztcbiYjNDM7ZW51bSBydHBzZV9tY3VfY21kIHtcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcbiYjNDM7XG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRSxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFMsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUcsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxuJiM0MztcbiYjNDM7XHRSVFBTRV9NQ1VfTlVNX0NNRFMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSB7XG4mIzQzO1x0dTggb3A7XG4mIzQzO1x0Ym9vbCB2YWxpZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcdHsgLm9wID0gKG9wYyksIC52YWxpZCA9IHRydWUgfVxuJiM0MztcbiYjNDM7LyogUGFyc2VkIE1DVSByZXNwb25zZSBzdHJ1Y3R1cmVzIChkZWNvZGVkIGZyb20gcnRwc2VfbWN1X21zZyByZXBsaWVzKSAqL1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9pbmZvIHtcbiYjNDM7XHR1OCBtYXhfcG9ydHM7XG4mIzQzO1x0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xuJiM0MztcdHUxNiBkZXZpY2VfaWQ7XG4mIzQzO1x0dTggc3dfdmVyO1xuJiM0MztcdHU4IG1jdV90eXBlO1xuJiM0MztcdHU4IGNvbmZpZ19zdGF0dXM7XG4mIzQzO1x0dTggZXh0X3ZlcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7XG4mIzQzO1x0dTggdXZsbztcbiYjNDM7XHR1OCBvdmxvO1xuJiM0MztcdGJvb2wgcHJlYWxsb2NfZW5hYmxlO1xuJiM0MztcdHU4IG51bV9vZl9wc2VzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XG4mIzQzO1x0dTggc3RzMTtcbiYjNDM7XHR1OCBzdHMyO1xuJiM0MztcdHU4IHN0czM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xuJiM0MztcdHUxNiB2b2x0YWdlX3JhdztcdC8qIDY0LjQ1bVYvTFNCICovXG4mIzQzO1x0dTE2IGN1cnJlbnRfcmF3O1x0LyogMW1BL0xTQiAqL1xuJiM0MztcdHUxNiB0ZW1wZXJhdHVyZV9yYXc7XHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xuJiM0MztcdHUxNiBwb3dlcl9yYXc7XHRcdC8qIDEwMG1XL0xTQiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBlbmFibGU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyB7XG4mIzQzO1x0dTggbWF4X3Bvd2VyO1xuJiM0MztcdHU4IHByaW9yaXR5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSBvcGNvZGVbUlRQU0VfTUNVX05VTV9DTURTXTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcbiYjNDM7XHQgKiBkaWFsZWN0IHN1cHBsaWVzIGl0cyBvd24uIE90aGVyIHJlc3BvbnNlcyBzaGFyZSBvbmUgbGF5b3V0IGFuZCBhcmVcbiYjNDM7XHQgKiBkZWNvZGVkIGRpcmVjdGx5IC0gYSBkaWFsZWN0IHRoYXQgZGl2ZXJnZXMgdGhlcmUgbXVzdCBhZGQgYSBob29rLFxuJiM0MztcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqcGFyc2Vfc3lzdGVtX2luZm8pKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pO1xuJiM0MztcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XG4mIzQzO1x0Y29uc3QgY2hhciAqKCptY3VfdHlwZV9zdHIpKHVuc2lnbmVkIGludCBtY3VfdHlwZSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHR1MTYgZGV2aWNlX2lkO1xuJiM0MztcdHUzMiBtYXhfbVdfcGVyX3BvcnQ7XG4mIzQzO1x0ZW51bSBydHBzZV9tY3VfY21kIHB3X3NldF9jbWQ7XHQvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovXG4mIzQzO1x0dTMyIHB3X3NldF9sc2JfbVc7XHRcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xuJiM0MztcdHUzMiBwd19yZWFkX2xzYl9tVztcdFx0LyogTFNCIG9mIGV4dF9jb25maWcubWF4X3Bvd2VyIHJlYWQtYmFjaywgaW4gbVcgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM4Yl9pbmZvID0ge1xuJiM0MztcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLFxuJiM0MztcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbiYjNDM7XHQubmFtZSA9IFwmIzM0O1JUTDgyMzhCXCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0ge1xuJiM0MztcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzksXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOVwmIzM0OyxcbiYjNDM7XHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4mIzQzO1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDQwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5Y19pbmZvID0ge1xuJiM0MztcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDLFxuJiM0MztcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcbiYjNDM7XHQubmFtZSA9IFwmIzM0O1JUTDgyMzlDXCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gNDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTExX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7QkNNNTkxMTFcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0ge1xuJiM0MztcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxLFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXRcbiYjNDM7XHQgKiBhbmQgdGhlIEJDTSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kIChcdTAwM2M9NTFXKTtcbiYjNDM7XHQgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbiYjNDM7XHQubmFtZSA9IFwmIzM0O0JDTTU5MTIxXCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpO1xuJiM0MztcdG1zZy1cdTAwM2VvcGNvZGUgPSBvcGNvZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHU4IHN1bSA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4tLSlcbiYjNDM7XHRcdHN1bSAmIzQzOz0gKmJ1ZiYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIHN1bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZG9feGZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VjaGVja3N1bSA9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnBzZS1cdTAwM2VtdXRleCkge1xuJiM0MztcdFx0cmV0ID0gcHNlLVx1MDAzZXRyYW5zcG9ydC1cdTAwM2VzZW5kKHBzZSwgcmVxKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBNQ1UgbmVlZHMgYSBmaXhlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHJlY2VpdmluZyBhIHJlcXVlc3RcbiYjNDM7XHRcdCAqIGFuZCBoYXZpbmcgdGhlIHJlc3BvbnNlIHJlYWR5LCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgYnl0ZXMgZ2V0IHRvXG4mIzQzO1x0XHQgKiB1cy4gUGFjZSB0aGUgdHJhbnNhY3Rpb24gaGVyZSBzbyBlYWNoIHRyYW5zcG9ydCBjYW4ga2VlcCBpdHMgcmVjdlxuJiM0MztcdFx0ICogcGF0aCBzaW1wbGU6IGEgc2luZ2xlIGJvdW5kZWQgd2FpdCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgcmV0cnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1zbGVlcChSVFBTRV9NQ1VfUkVTUE9OU0VfTVMpO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChyZXNwLCAwLCBzaXplb2YoKnJlc3ApKTtcbiYjNDM7XHRcdHJldCA9IHBzZS1cdTAwM2V0cmFuc3BvcnQtXHUwMDNlcmVjdihwc2UsIHJlcSwgcmVzcCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFeHBsaWNpdCBNQ1UgZXJyb3Igb3Bjb2RlcyAob2JzZXJ2ZWQgb24gdGhlIEJDTSBkaWFsZWN0OyBoYXJtbGVzc1xuJiM0MztcdCAqIHRvIGNoZWNrIGZvciBSVEwgdG9vKS4gQ2F0Y2ggdGhlc2UgYmVmb3JlIHRoZSBnZW5lcmljIG9wY29kZS9DUkNcbiYjNDM7XHQgKiBtaXNtYXRjaCBwYXRoIHNvIGNhbGxlcnMgc2VlIGEgbWVhbmluZ2Z1bCBlcnJuby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKHJlc3AtXHUwMDNlb3Bjb2RlKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6XG4mIzQzO1x0XHRyZXR1cm4gLUVCQURFO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTpcbiYjNDM7XHRcdHJldHVybiAtRUJBRE1TRztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmVzcC1cdTAwM2VvcGNvZGUgIT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuJiM0MztcdCAgICByZXNwLVx1MDAzZXNlcV9udW0gIT0gcmVxLVx1MDAzZXNlcV9udW0gfHxcbiYjNDM7XHQgICAgcmVzcC1cdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4mIzQzO1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgcmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyZXNwLVx1MDAzZXBheWxvYWRbMF0gIT0gcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9jbWQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsIHU4IGFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuJiM0MztcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcbiYjNDM7XHRyZXEucGF5bG9hZFsxXSA9IGFyZztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocmVzcC5wYXlsb2FkWzBdICE9IHBvcnQgfHwgcmVzcC5wYXlsb2FkWzFdICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEdsb2JhbCBvcGVyYXRpb25zICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvKHJlc3AucGF5bG9hZCwgaW5mbyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgKmNvbmZpZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2V1dmxvID0gcmVzcC5wYXlsb2FkWzBdO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZW51bV9vZl9wc2VzID0gcmVzcC5wYXlsb2FkWzZdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMxID0gcmVzcC5wYXlsb2FkWzFdO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMzID0gcmVzcC5wYXlsb2FkWzNdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtZWFzdXJlbWVudC1cdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xuJiM0MztcdG1lYXN1cmVtZW50LVx1MDAzZWN1cnJlbnRfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFszXSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNldGVtcGVyYXR1cmVfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs1XSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZWVuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VtYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXByaW9yaXR5ID0gcmVzcC5wYXlsb2FkWzRdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUFNFIGNvbnRyb2xsZXIgb3BzICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0YWRtaW5fc3RhdGUtXHUwMDNlYzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDpcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfU0VBUkNISU5HO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19URVNUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVEVTVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVU5LTk9XTjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhXG4mIzQzO1x0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XG4mIzQzO1x0ICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXNcbiYjNDM7XHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlc1xuJiM0MztcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuJiM0MztcdFx0cmV0dXJuIHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MoXHUwMDI2c3RhdHVzKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiAxMDBtVyBwZXIgTFNCICovXG4mIzQzO1x0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiB1VjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFx1MDAyNm1lYXN1cmVtZW50KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogNjQuNDVtViBwZXIgTFNCICovXG4mIzQzO1x0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsIFx1MDAyNmNvbmZpZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVx1MDAzZWNoaXAtXHUwMDNlcHdfcmVhZF9sc2JfbVc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqdHlwZV9vcGMsICp2YWxfb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLVx1MDAzZWNoaXA7XG4mIzQzO1x0dTggcHJnX3ZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobWF4X21XIFx1MDAzYyAwIHx8IG1heF9tVyBcdTAwM2UgY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0dHlwZV9vcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXTtcbiYjNDM7XHR2YWxfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW2NoaXAtXHUwMDNlcHdfc2V0X2NtZF07XG4mIzQzO1x0LyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqL1xuJiM0MztcdGlmICghdHlwZV9vcGMtXHUwMDNldmFsaWQgfHwgIXZhbF9vcGMtXHUwMDNldmFsaWQgfHwgIWNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcbiYjNDM7XHQgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW5cbiYjNDM7XHQgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0XG4mIzQzO1x0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtXHUwMDNlb3AsIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLVx1MDAzZW9wLCBwcmdfdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlKTtcbiYjNDM7XHRpZiAoIXJhbmdlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJhbmdlWzBdLm1pbiA9IDA7XG4mIzQzO1x0cmFuZ2VbMF0ubWF4ID0gcHNlLVx1MDAzZWNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0O1xuJiM0MztcbiYjNDM7XHRvdXQtXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbmZpZy5wcmlvcml0eTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1xuJiM0MztcdGlmIChwcmlvIFx1MDAzZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy1cdTAwM2VvcCwgcHJpbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfb3BzIHJ0cHNlX21jdV9vcHMgPSB7XG4mIzQzO1x0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcbiYjNDM7XHQucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsXG4mIzQzO1x0LnBpX2dldF9wd19jbGFzcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyxcbiYjNDM7XHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXG4mIzQzO1x0LnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSxcbiYjNDM7XHQucGlfZGlzYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUsXG4mIzQzO1x0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXG4mIzQzO1x0LnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCxcbiYjNDM7XHQucGlfc2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0LFxuJiM0MztcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcbiYjNDM7XHQucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyxcbiYjNDM7XHQucGlfc2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2Rpc2NvdmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgZXh0X2NvbmZpZztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXG4mIzQzO1x0ICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhXG4mIzQzO1x0ICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhXG4mIzQzO1x0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUyk7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FVElNRURPVVQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5YSU8gXHUwMDI2XHUwMDI2IHJldCAhPSAtRVJFTU9URUlPIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVCQURNU0cgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUJBREUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0bXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTtcbiYjNDM7XHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBpbmZvXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpbmZvLVx1MDAzZWRldmljZV9pZCkge1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOGJfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxuJiM0MztcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM5X2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzljX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTExX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTIxX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCwgXCYjMzQ7dW5rbm93biBQU0UgaWQgMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZGV2aWNlX2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VtYXhfcG9ydHMgfHwgaW5mby1cdTAwM2VtYXhfcG9ydHMgXHUwMDNlIFJUUFNFX01DVV9NQVhfUE9SVFMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7TUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XFxuXCYjMzQ7LCBpbmZvLVx1MDAzZW1heF9wb3J0cyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsIFx1MDAyNmV4dF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm8ocHNlLVx1MDAzZWRldiwgXCYjMzQ7JXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0IHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cihpbmZvLVx1MDAzZW1jdV90eXBlKSwgcHNlLVx1MDAzZWNoaXAtXHUwMDNlbmFtZSxcbiYjNDM7XHRcdCBpbmZvLVx1MDAzZWRldmljZV9pZCwgaW5mby1cdTAwM2VtYXhfcG9ydHMsIGV4dF9jb25maWcubnVtX29mX3BzZXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHJlZ3VsYXRvcl9kaXNhYmxlKGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShwc2UtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIW1hdGNoKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVOT0RFViwgXCYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXFxuXCYjMzQ7KTtcbiYjNDM7XHRwc2UtXHUwMDNlZGlhbGVjdCA9IG1hdGNoLVx1MDAzZWRpYWxlY3Q7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0XG4mIzQzO1x0ICogcHJvYmUgdGltZSwgcmF0aGVyIHRoYW4gTlVMTC1kZXJlZiYjMzk7aW5nIGxhdGVyIGZyb20gYSBmYXN0IHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwc2UtXHUwMDNlZGlhbGVjdCB8fFxuJiM0MztcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8gfHxcbiYjNDM7XHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MgfHxcbiYjNDM7XHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cilcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwc2UtXHUwMDNlcG9lX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChwc2UtXHUwMDNlZGV2LCBcJiMzNDtwb3dlclwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwc2UtXHUwMDNlcG9lX3N1cHBseSkpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCBQVFJfRVJSKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgUG9FIHN1cHBseVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLVx1MDAzZWRldiwgXCYjMzQ7ZW5hYmxlXCYjMzQ7LCBHUElPRF9PVVRfSElHSCk7XG4mIzQzO1x0aWYgKElTX0VSUihlbmFibGVfZ3BpbykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCBQVFJfRVJSKGVuYWJsZV9ncGlvKSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW9cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZGlzY292ZXIocHNlLCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwc2UtXHUwMDNlcG9lX3N1cHBseSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQb0Ugc3VwcGx5XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cdTAwM2VkZXYsIHJ0cHNlX21jdV9yZWd1bGF0b3JfZGlzYWJsZSwgcHNlLVx1MDAzZXBvZV9zdXBwbHkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkge1xuJiM0MztcdFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcbiYjNDM7XHRcdC8qIERpYWxlY3RzIHdpdGhvdXQgYSBnbG9iYWwtc3RhdGUgY29uY2VwdCAoZS5nLiBCQ00pIHJldHVyblxuJiM0MztcdFx0ICogLUVPUE5PVFNVUFA7IHRyZWF0IHRoYXQgYXMgXCYjMzQ7bm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkXCYjMzQ7LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQU0Ugc3lzdGVtXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICghcmV0KSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlLCBwc2UpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERlcGVuZGluZyBvbiB0aGUgTUNVIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gKHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudFxuJiM0MztcdCAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbiYjMzk7dCBrbm93biB3aGV0aGVyIHRoZSBQb0Ugc3Vic3lzdGVtIGlzIGFjdGl2ZSBvclxuJiM0MztcdCAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyXG4mIzQzO1x0ICogcG93ZXIgdG8gUERzIHdpdGhvdXQgYW55IGV4cGxpY2l0IGVuYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0LyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXJcbiYjNDM7XHQgKiBwaW5zIHRoZSB0cmFuc3BvcnQgbW9kdWxlIHRoYXQgb3ducyB0aGUgbGl2ZSBkZXZpY2UsIG5vdCB0aGUgY29yZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYub3BzICAgICAgPSBcdTAwMjZydHBzZV9tY3Vfb3BzO1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5kZXYgICAgICA9IHBzZS1cdTAwM2VkZXY7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2LnR5cGVzICAgID0gRVRIVE9PTF9QU0VfQzMzO1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzO1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFk7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcihwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlcGNkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aW5mby1cdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xuJiM0MztcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cGF5bG9hZFszXSk7XG4mIzQzO1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuJiM0MztcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuJiM0MztcdGluZm8tXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XG4mIzQzO1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdC8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi9cbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cdTAwM2VzdHMyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKG1jdV90eXBlKSB7XG4mIzQzO1x0Y2FzZSAweDAwOlx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkYzMTBcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkYyMzBcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAyOlx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkYzMDNcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAzOlx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkYxMDNcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDA0Olx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkUxMDNcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDEwOlx0cmV0dXJuIFwmIzM0O051dm90b24gTTA1MTZcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDExOlx0cmV0dXJuIFwmIzM0O051dm90b24gTTA1NjRcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDEyOlx0cmV0dXJuIFwmIzM0O051dm90b24gTlVDMDI5XCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6XHRyZXR1cm4gXCYjMzQ7dW5rbm93blwmIzM0OztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRpbmZvLVx1MDAzZW1heF9wb3J0cyA9IHBheWxvYWRbMV07XG4mIzQzO1x0LyogQkNNIGhhcyBubyBleHBsaWNpdCBzeXN0ZW1fZW5hYmxlIGJ5dGU7IHRoZSBjbG9zZXN0IGFuYWxvZyBpcyB0aGVcbiYjNDM7XHQgKiBcJiMzNDtyZW1vdGUgZW5hYmxlXCYjMzQ7IGJpdCBpbiB0aGUgc3lzdGVtLXN0YXR1cyBmbGFncyBhdCBwYXlsb2FkWzddLlxuJiM0MztcdCAqL1xuJiM0MztcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9ICEhKHBheWxvYWRbN10gXHUwMDI2IEJJVCgyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cGF5bG9hZFszXSk7XG4mIzQzO1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuJiM0MztcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuJiM0MztcdGluZm8tXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XG4mIzQzO1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdC8qIEJDTSBwdXRzIHRoZSBkZXRlY3RlZCBjbGFzcyBpbiBwYXlsb2FkWzNdICg9PSBzdHMzKSBkaXJlY3RseS5cbiYjNDM7XHQgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlXG4mIzQzO1x0ICogbm9pc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHN0YXR1cy1cdTAwM2VzdHMzIFx1MDAyNiAweDBmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobWN1X3R5cGUpIHtcbiYjNDM7XHRjYXNlIDB4MDA6XHRyZXR1cm4gXCYjMzQ7U1QgTWljcm8gU1QzMkYxMDBcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwmIzM0O051dm90b24gTTA1eHggTEFOXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMjpcdHJldHVybiBcJiMzNDtTVCBNaWNybyBTVEYwMzBDOFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDM6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDU4U0FOXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwNDpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE5VQzEyMlwmIzM0OztcbiYjNDM7XHRkZWZhdWx0Olx0cmV0dXJuIFwmIzM0O3Vua25vd25cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiA9IHtcbiYjNDM7XHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbyxcbiYjNDM7XHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLFxuJiM0MztcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cixcbiYjNDM7XHQub3Bjb2RlID0ge1xuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cdD0gUlRQU0VfTUNVX09QKDB4MDApLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDRhKSxcbiYjNDM7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDEyKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldXHQ9IFJUUFNFX01DVV9PUCgweDE1KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cdD0gUlRQU0VfTUNVX09QKDB4NDQpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQ4KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDQ5KSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0ge1xuJiM0MztcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvLFxuJiM0MztcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MsXG4mIzQzO1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLFxuJiM0MztcdC5vcGNvZGUgPSB7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4MjApLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxuJiM0MztcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdXHQ9IFJUUFNFX01DVV9PUCgweDE2KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4MjEpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXHQ9IFJUUFNFX01DVV9PUCgweDMwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyNSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHgyNiksXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhID0ge1xuJiM0MztcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjFfZGF0YSk7XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YSA9IHtcbiYjNDM7XHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2RhdGEpO1xuJiM0MztcbiYjNDM7LyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqL1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgPSB7XG4mIzQzO1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxuJiM0MztcdC5uYXRpdmVfaTJjID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKGNvcmUpXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NzE3Njg0YzBjYmQ5MFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xuQEAgLTAsMCAmIzQzOzEsMTcxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvXG4mIzQzOyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXG4mIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbiYjNDM7ICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcdChSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUylcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdC8qIFNlbmQgb3Bjb2RlIGFzIFNNQnVzIGNvbW1hbmQgYnl0ZTsgcmVtYWluaW5nIDExIGJ5dGVzIGFzIGJsb2NrIGRhdGEgKi9cbiYjNDM7XHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSAmIzQzOyAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1x0aW50IHRyaWVzLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRyaWVzIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUNVIG5lZWRzIDB4MDAgYXMgY29tbWFuZCBieXRlIGZvciByZWFkICovXG4mIzQzO1x0XHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAodTggKilyZXNwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSBcdTAwMjZcdTAwMjYgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdHZvaWQgKmJ1ZjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBpMmNfbWFzdGVyX3NlbmQoKSBtYXkgRE1BLCBzbyB0aGUgYnVmZmVyIG11c3Qgbm90IGJlIG9uIHRoZSBzdGFjay4gKi9cbiYjNDM7XHRidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1x0a2ZyZWUoYnVmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGludCB0cmllcywgcmV0O1xuJiM0MztcdHU4ICpidWY7XG4mIzQzO1xuJiM0MztcdC8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqL1xuJiM0MztcdGJ1ZiA9IGttYWxsb2MoUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0cmllcyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUpIHtcbiYjNDM7XHRcdFx0bWVtY3B5KHJlc3AsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRcdFx0aWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IC1FVElNRURPVVQ7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShidWYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzID0ge1xuJiM0MztcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcbiYjNDM7XHRib29sIHVzZV9uYXRpdmU7XG4mIzQzO1xuJiM0MztcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4mIzQzO1x0aWYgKCFtYXRjaClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgXCYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZyYW1pbmcgKHJhdyBJMkMgdnMgU01CdXMpIGlzIGNhcnJpZWQgYnkgdGhlIG1hdGNoIGRhdGEuICovXG4mIzQzO1x0dXNlX25hdGl2ZSA9IG1hdGNoLVx1MDAzZW5hdGl2ZV9pMmM7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VfbmF0aXZlKSB7XG4mIzQzO1x0XHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cdTAwM2VhZGFwdGVyLCBJMkNfRlVOQ19JMkMpKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuJiM0MztcdFx0XHRcdFwmIzM0O3BsYWluLUkyQyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgSTJDLWNhcGFibGUgYWRhcHRlclxcblwmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcbiYjNDM7XHRcdFx0XHRcJiMzNDtTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHNlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwc2UpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBzZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwc2UtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuJiM0MztcdHBzZS1cdTAwM2V0cmFuc3BvcnQgPSB1c2VfbmF0aXZlID8gXHUwMDI2cnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzIDogXHUwMDI2cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1wmIzM0OywgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfZ2VuMV9kYXRhIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4yX2RhdGEgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4yX2kyY19kYXRhIH0sXG4mIzQzO1x0eyAvKiBzZW50aW5lbCAqLyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0cHNlX21jdV9pMmNfZHJpdmVyID0ge1xuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O3JlYWx0ZWstcHNlLW1jdS1pMmNcJiMzNDssXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGVcdD0gcnRwc2VfbWN1X2kyY19vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0MztcdC5wcm9iZVx0XHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChJMkMgdHJhbnNwb3J0KVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MWNhZGI1NTY5YWI0NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcbkBAIC0wLDAgJiM0MzsxLDE1NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXJkZXYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtyZWFsdGVrLXBzZS1tY3UuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFRcdDE5MjAwXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVFx0bXNlY3NfdG9famlmZmllcygxMDApXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVFx0bXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TKVxuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV91YXJ0IHtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlO1xuJiM0MztcdHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXY7XG4mIzQzO1x0c3RydWN0IGNvbXBsZXRpb24gcnhfZG9uZTtcbiYjNDM7XHRzcGlubG9ja190IHJ4X2xvY2s7XHRcdC8qIHByb3RlY3RzIHJ4X2J1ZiBhbmQgcnhfbGVuICovXG4mIzQzO1x0c2l6ZV90IHJ4X2xlbjtcbiYjNDM7XHR1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlblxuJiM0MzsgKiB0aGUgbmV4dCBfc2VuZCByZS1mcmFtZXMgZnJvbSByeF9sZW4gMC4gUmVzeW5jIHdvcmtzIGJ5IHJldHVybmluZyBjb3VudFxuJiM0MzsgKiAobm90IHRha2UpLCBkcm9wcGluZyBhbnkgb3ZlcmZsb3cgc28gc2VyZGV2IGtlZXBzIG5vIGxlZnRvdmVyIHRvIGJsZWVkXG4mIzQzOyAqIGludG8gdGhlIG5leHQgZnJhbWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc2l6ZV90IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpO1xuJiM0MztcdHNpemVfdCB0YWtlO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbiYjNDM7XHRcdHRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtXHUwMDNlcnhfYnVmKSAtIGN0eC1cdTAwM2VyeF9sZW4pO1xuJiM0MztcdFx0aWYgKHRha2UpIHtcbiYjNDM7XHRcdFx0bWVtY3B5KGN0eC1cdTAwM2VyeF9idWYgJiM0MzsgY3R4LVx1MDAzZXJ4X2xlbiwgYnVmLCB0YWtlKTtcbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZXJ4X2xlbiAmIzQzOz0gdGFrZTtcbiYjNDM7XHRcdFx0aWYgKGN0eC1cdTAwM2VyeF9sZW4gPT0gc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpKVxuJiM0MztcdFx0XHRcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGNvbnN1bWUgYWxsIHRvIGF2b2lkIGRlc3luYy9taXNhbGlnbm1lbnQgKi9cbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgcnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyA9IHtcbiYjNDM7XHQucmVjZWl2ZV9idWYgPSBydHBzZV9tY3VfdWFydF9yZWNlaXZlLFxuJiM0MztcdC53cml0ZV93YWtldXAgPSBzZXJkZXZfZGV2aWNlX3dyaXRlX3dha2V1cCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcbiYjNDM7XHRpbnQgd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0LyogY2xlYXIgYW55IGxlZnRvdmVyIHJ4IHN0YXRlIGJlZm9yZSB0cmFuc21pdHRpbmcgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbiYjNDM7XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VyeF9sZW4gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d3JpdHRlbiA9IHNlcmRldl9kZXZpY2Vfd3JpdGUoY3R4LVx1MDAzZXNlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksXG4mIzQzO1x0XHRcdFx0ICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7XG4mIzQzO1x0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gd3JpdHRlbjtcbiYjNDM7XHRpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUsIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVQpKVxuJiM0MztcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0aWYgKGN0eC1cdTAwM2VyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdFx0bWVtY3B5KHJlc3AsIGN0eC1cdTAwM2VyeF9idWYsIHNpemVvZigqcmVzcCkpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzID0ge1xuJiM0MztcdC5zZW5kID0gcnRwc2VfbWN1X3VhcnRfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV91YXJ0X3JlY3YsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc3BlZWQgPSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQ7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2c2VyZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRjdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VzZXJkZXYgPSBzZXJkZXY7XG4mIzQzO1x0Y3R4LVx1MDAzZXBzZS5kZXYgPSBkZXY7XG4mIzQzO1x0Y3R4LVx1MDAzZXBzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuJiM0MztcdGN0eC1cdTAwM2Vwc2UudHJhbnNwb3J0ID0gXHUwMDI2cnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcztcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsIFx1MDAyNnJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gb3BlbiBzZXJkZXZcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCBcJiMzNDtjdXJyZW50LXNwZWVkXCYjMzQ7LCBcdTAwMjZzcGVlZCk7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpO1xuJiM0MztcdHNlcmRldl9kZXZpY2Vfc2V0X3Bhcml0eShzZXJkZXYsIFNFUkRFVl9QQVJJVFlfTk9ORSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXHUwMDI2Y3R4LVx1MDAzZXBzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4xXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjJcJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi8gfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHtcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtyZWFsdGVrLXBzZS1tY3UtdWFydFwmIzM0OyxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHJ0cHNlX21jdV91YXJ0X29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfc2VyZGV2X2RldmljZV9kcml2ZXIocnRwc2VfbWN1X3VhcnRfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOWE2ZGEyYzhmMzdkOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICYjNDM7MSw5MCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0hcbiYjNDM7I2RlZmluZSBfUkVBTFRFS19QU0VfTUNVX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuJiM0MzsgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZVxuJiM0MzsgKiB1bmRlcmx5aW5nIHRyYW5zcG9ydDogdGhlIGNvcmUgcGFjZXMgdHJhbnNhY3Rpb25zIGJ5IFJUUFNFX01DVV9SRVNQT05TRV9NU1xuJiM0MzsgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4mIzQzOyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXNcbiYjNDM7ICogbmVlZGluZyB1cCB0byB+MXMgdG8gcHJvZHVjZSBhIHJlcGx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcdFx0XHQyNVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVNcdFx0MTAwMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZVxuJiM0MzsgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4mIzQzOyAqIGFuc3dlciBvbiB0aGUgYnVzIHlldDsgZ2l2ZSBpdCBhIGJvdW5kZWQgd2luZG93IHRvIGNvbWUgdXAgYmVmb3JlXG4mIzQzOyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TXHRcdDMwMDBcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NU1x0XHRcdDEwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTVNHX1NJWkVcdFx0XHQxMlxuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tc2cge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCBzZXFfbnVtO1xuJiM0MztcdHU4IHBheWxvYWRbOV07XG4mIzQzO1x0dTggY2hlY2tzdW07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuXG4mIzQzOyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEVcdFx0MHhmZFx0LyogLUVCQURFICAgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXHRcdDB4ZmVcdC8qIC1FQkFETVNHICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFlcdFx0MHhmZlx0LyogLUVBR0FJTiAgKi9cbiYjNDM7XG4mIzQzOy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlc3AtXHUwMDNlb3Bjb2RlID09IHJlcS1cdTAwM2VvcGNvZGUgfHxcbiYjNDM7XHQgICAgICAgcmVzcC1cdTAwM2VvcGNvZGUgPT0gUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFIHx8XG4mIzQzO1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0O1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jdHJsO1xuJiM0MztcbiYjNDM7LyogUGVyLWNvbXBhdGlibGUgbWF0Y2ggZGF0YSAodGhlIG9mX21hdGNoIC5kYXRhKS4gKi9cbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7XG4mIzQzO1x0Ym9vbCBuYXRpdmVfaTJjO1x0LyogcmF3LUkyQyBmcmFtaW5nICh2cyBTTUJ1cyk7IEkyQyB0cmFuc3BvcnQgb25seSAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHtcbiYjNDM7XHRpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7XG4mIzQzO1x0aW50ICgqcmVjdikoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jdHJsIHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4mIzQzO1x0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHNlcmlhbGl6ZXMgTUNVIHJlcXVlc3QvcmVzcG9uc2UgdHJhbnNhY3Rpb25zICovXG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyAqdHJhbnNwb3J0O1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICpwb2Vfc3VwcGx5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7XG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGE7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2RvX3hmZXImIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfc21idXNfcmVjdiYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGY0OGY0YmZjZGZhMzBlNTI3ZGVmNDRkYWEyZmZhOWQ3YWM5ZGYxNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDE2OjQyOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzMzMzA2MTkzZGI1N2UKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbApAQCAtMCwwICYjNDM7MSwxNzYgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFJlYWx0ZWsgUFNFIE1DVQomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkKJiM0MzsgIGhhcmR3YXJlIG9uIGEgcmFuZ2Ugb2YgbWFuYWdlZCBQb0Ugc3dpdGNoZXMuIFRoZSBob3N0IENQVSB0YWxrcyBvbmx5IHRvCiYjNDM7ICB0aGlzIE1DVSAtIG92ZXIgSTJDL1NNQnVzIG9yIFVBUlQgLSB1c2luZyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7CiYjNDM7ICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkCiYjNDM7ICBkaXJlY3RseS4gRm9yIGV4YW1wbGUsIG9uIHRoZSBaeXhlbCBHUzE5MDAtMTBIUCB0aGUgU29DIHJlYWNoZXMgdGhlIE1DVQomIzQzOyAgb3ZlciBVQVJULCBhbmQgdGhlIE1DVSBtYW5hZ2VzIHRoZSBvbi1ib2FyZCBQU0UgY2hpcC4KJiM0MzsKJiM0MzsgIFRoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIE1DVSB0b2dldGhlciB3aXRoIGl0cyBSZWFsdGVrIGZpcm13YXJlOiB0aGUKJiM0MzsgIGZpcm13YXJlIGFuZCBpdHMgaG9zdCBwcm90b2NvbCwgd2hpY2ggYXJlIHN0YWJsZSBhY3Jvc3MgYm9hcmRzLiBUaGUKJiM0MzsgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGUKJiM0MzsgIFBTRSBzaWxpY29uIGJlaGluZCB0aGUgTUNVIChSZWFsdGVrIFJUTDgyM3gvUlRMODIzOSogb3IgQnJvYWRjb20KJiM0MzsgIEJDTTU5eHh4KSBpcyByZXBvcnRlZCBieSB0aGUgTUNVIGFuZCBkZXRlY3RlZCBhdCBydW50aW1lIC0gbmVpdGhlciBpcwomIzQzOyAgbmFtZWQgaGVyZS4KJiM0MzsKJiM0MzsgIFR3byBwcm90b2NvbCBnZW5lcmF0aW9ucyBleGlzdCwgYm90aCBSZWFsdGVrJiMzOTtzOgomIzQzOyAgICBnZW4xICBvbGRlciBib2FyZHMsIHdoZXJlIHRoZSBNQ1UgZnJvbnRzIEJyb2FkY29tIFBTRSBzaWxpY29uCiYjNDM7ICAgIGdlbjIgIHRoZSBhbHRlcmVkIHByb3RvY29sIHVzZWQgd2l0aCBSZWFsdGVrJiMzOTtzIG93biBQU0Ugc2lsaWNvbgomIzQzOwomIzQzOyAgT24gYW4gSTJDIGF0dGFjaG1lbnQgdGhlIGZyYW1pbmcgdGhlIE1DVSBmaXJtd2FyZSBleHBlY3RzIGlzIHBhcnQgb2YgdGhlCiYjNDM7ICBjb21wYXRpYmxlOiAmIzM5Oy1zbWJ1cyYjMzk7IChyZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlIGFuZCBhIHJlcGVhdGVkCiYjNDM7ICBzdGFydCkgb3IgJiMzOTstaTJjJiMzOTsgKGJhcmUgYmxvY2sgd3JpdGVzIGFuZCByZWFkcykuIEEgVUFSVCBhdHRhY2htZW50IGNhcnJpZXMKJiM0MzsgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJiMzOTtzZXJpYWwmIzM5OyBub2RlLgomIzQzOwomIzQzOyAgRWFjaCBib2FyZCBhZGRpdGlvbmFsbHkgY2FycmllcyBhIGRldmljZS1zcGVjaWZpYyBjb21wYXRpYmxlIHRoYXQgZmFsbHMKJiM0MzsgIGJhY2sgdG8gb25lIG9mIHRoZSBwcm90b2NvbCBjb21wYXRpYmxlcyBhYm92ZS4gRHJpdmVycyBiaW5kIG9uIHRoZQomIzQzOyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kCiYjNDM7ICByZXNlcnZlcyBhIHBsYWNlIGZvciBhIGZ1dHVyZSBwZXItYm9hcmQgcXVpcmsgd2l0aG91dCBoYXZpbmcgdG8gcmV0cm9maXQKJiM0MzsgIGRldmljZSB0cmVlcyBhbHJlYWR5IGluIHRoZSBmaWVsZC4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgb25lT2Y6CiYjNDM7ICAgICAgIyBVQVJUCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1hMS1wc2UKJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjEKJiM0MzsKJiM0MzsgICAgICAjIEkyQywgU01CdXMgZnJhbWluZwomIzQzOyAgICAgIC0gaXRlbXM6CiYjNDM7ICAgICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTIwLTI0aHAtdjItcHNlCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzCiYjNDM7CiYjNDM7ICAgICAgIyBVQVJUCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1iMS1wc2UKJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwseG1nMTkxNS0xMGVwLXBzZQomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMgomIzQzOwomIzQzOyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCx4czE5MzAtMTJocC1wc2UKJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXMKJiM0MzsKJiM0MzsgICAgICAjIEkyQywgcmF3IGZyYW1pbmcKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIGxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZQomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHBvd2VyLXN1cHBseToKJiM0MzsgICAgZGVzY3JpcHRpb246IFJlZ3VsYXRvciBzdXBwbHlpbmcgdGhlIFBvRSBwb3dlciByYWlsLgomIzQzOwomIzQzOyAgZW5hYmxlLWdwaW9zOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjCiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NlcmlhbC9zZXJpYWwtcGVyaXBoZXJhbC1wcm9wcy55YW1sIwomIzQzOyAgIyBBICYjMzk7LXNtYnVzJiMzOTsvJiMzOTstaTJjJiMzOTsgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICYjMzk7cmVnJiMzOTsgYW5kCiYjNDM7ICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlQKJiM0MzsgICMgYXR0YWNobWVudDogbm8gJiMzOTtyZWcmIzM5OywgdGhlIHRyYW5zcG9ydCBjb21lcyBmcm9tIHRoZSBwYXJlbnQgc2VyaWFsIG5vZGUuCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1cwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gcmVnCiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlCiYjNDM7ICAgICAgICBtYXgtc3BlZWQ6IGZhbHNlCiYjNDM7ICAgIGVsc2U6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHJlZzogZmFsc2UKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudAomIzQzOyAgLSB8CiYjNDM7ICAgIGkyYyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt6eXhlbCx4czE5MzAtMTJocC1wc2UmIzM0OywgJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cyYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDIwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBwc2UtcGlzIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50CiYjNDM7ICAtIHwKJiM0MzsgICAgaTJjIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2xpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZSYjMzQ7LCAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyYyYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDIwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBwc2UtcGlzIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgIyBVQVJUIGF0dGFjaG1lbnQKJiM0MzsgIC0gfAomIzQzOyAgICBzZXJpYWwgewomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt6eXhlbCxnczE5MDAtMTBocC1hMS1wc2UmIzM0OywgJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMSYjMzQ7OwomIzQzOyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSAmbHQ7MTkyMDAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBzZS1waXMgewomIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDUyZjFhNTVlY2E5OWJmLi4zYjIxZTQ2YmU2OGExZiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIyNzE2LDYgJiM0MzsyMjcxNiwxMyBAQCBTOglNYWludGFpbmVkCiBGOglpbmNsdWRlL3NvdW5kL3J0Ki5oCiBGOglzb3VuZC9zb2MvY29kZWNzL3J0KgogCiYjNDM7UkVBTFRFSyBQU0UgTUNVIERSSVZFUgomIzQzO006CUpvbmFzIEplbG9uZWsgJmx0O2plbG9uZWsuam9uYXNAZ21haWwuY29tJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KgomIzQzOwogUkVBTFRFSyBPVFRPIFdBVENIRE9HCiBNOglTYW5kZXIgVmFuaGV1bGUgJmx0O3NhbmRlckBzdmFuaGV1bGUubmV0Jmd0OwogTDoJbGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnCmluZGV4IDdlZjI5NjU3ZWU1ZGQxLi5hMGYyYWU2NjhjNjdjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcKQEAgLTEzLDYgJiM0MzsxMywzNCBAQCBtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSCiAKIGlmIFBTRV9DT05UUk9MTEVSCiAKJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVCiYjNDM7CXRyaXN0YXRlCiYjNDM7CWhlbHAKJiM0MzsJICBTaGFyZWQgY29yZSBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIuIFRoaXMgaXMgc2VsZWN0ZWQKJiM0MzsJICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB0cmFuc3BvcnQgb3B0aW9ucyBiZWxvdy4KJiM0MzsKJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVX0kyQwomIzQzOwl0cmlzdGF0ZSAmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBJMkMKJiM0MzsJc2VsZWN0IFBTRV9SRUFMVEVLX01DVQomIzQzOwloZWxwCiYjNDM7CSAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0UKJiM0MzsJICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWQKJiM0MzsJICB2aWEgSTJDL1NNQnVzLiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsCiYjNDM7CSAgUFNFIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEKJiM0MzsJICBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmVhbHRlay1wc2UtbWN1LWkyYy4KJiM0MzsKJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlQKJiM0MzsJdHJpc3RhdGUgJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydCkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTCiYjNDM7CXNlbGVjdCBQU0VfUkVBTFRFS19NQ1UKJiM0MzsJaGVscAomIzQzOwkgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFCiYjNDM7CSAgaGFyZHdhcmUgb24gdmFyaW91cyBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMsIGF0dGFjaGVkCiYjNDM7CSAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFCiYjNDM7CSAgc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYQomIzQzOwkgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC4KJiM0MzsKIGNvbmZpZyBQU0VfUkVHVUxBVE9SCiAJdHJpc3RhdGUgJiMzNDtSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXImIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQppbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsOSBAQAogCiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vCiAKJiM0MztvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWNvcmUubwomIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vCiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LXVhcnQubwogb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICYjNDM7PSBwc2VfcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAubwogb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMGE1YmI3ODQzNjBhNWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYwpAQCAtMCwwICYjNDM7MSw5OTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXMKJiM0MzsgKiBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMuIFRoZSBNQ1Ugc3BlYWtzIGEgMTItYnl0ZSBmaXhlZC1mcmFtZQomIzQzOyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlCiYjNDM7ICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLgomIzQzOyAqCiYjNDM7ICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGUKJiM0MzsgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yCiYjNDM7ICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVCiYjNDM7ICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbC4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3QKJiM0MzsgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLgomIzQzOyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmUKJiM0MzsgKiB0aGUgTUNVIGZyb250cyBhbmQgbWFuYWdlcyBCcm9hZGNvbSBQU0Ugc2lsaWNvbjsgR2VuMiBiZWluZyB1c2VkIHdpdGgKJiM0MzsgKiBSZWFsdGVrIFBTRSBzaWxpY29uLiBUaGUgdHdvIHNoYXJlIGZyYW1lIGZvcm1hdCBhbmQgYSBzdW0tbW9kLTI1NgomIzQzOyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzOwomIzQzOyAqIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuCiYjNDM7ICoKJiM0MzsgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3QKJiM0MzsgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sCiYjNDM7ICogZmFtaWx5LCBhbmQgJiMzNDtkdW1iIFBTRSYjMzQ7IG1vZGVzIHdoZXJlIG5vIGhvc3QgY29udHJvbCBpcyB3aXJlZCB1cCBhdCBhbGwuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1UKJiM0MzsgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlcwomIzQzOyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2CiYjNDM7ICogY2FsbGJhY2tzLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbnRhaW5lcl9vZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ncGlvL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ppZmZpZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3JlYWx0ZWstcHNlLW1jdS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIJCTB4MDEzOAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5CQkweDAwMzkKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMJCTB4MDEzOQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMQkJMHhlMTExCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxCQkweGUxMjEKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRAkJMHgwMAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORwkJMHgwMQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkcJCTB4MDIKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19URVNUCQkJMHgwMwkvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVAkJMHgwNAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUCQkweDA1CS8qIEdlbjEtb25seTsgcmVzZXJ2ZWQgb24gR2VuMiAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkcJCTB4MDYKJiM0MzsKJiM0MzsvKiBSVFBTRV9NQ1VfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSB2YWx1ZXMgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUgkweDAyCiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTUFYX1BPUlRTCQkJNDgKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWQkJMwomIzQzOwomIzQzO2VudW0gcnRwc2VfbWN1X2NtZCB7CiYjNDM7CVJUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURSwKJiM0MzsJUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sCiYjNDM7CVJUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUcsCiYjNDM7CiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9FTkFCTEUsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSwKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCwKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLAomIzQzOwomIzQzOwlSVFBTRV9NQ1VfTlVNX0NNRFMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSB7CiYjNDM7CXU4IG9wOwomIzQzOwlib29sIHZhbGlkOwomIzQzO307CiYjNDM7CiYjNDM7LyogU2hvcnRoYW5kIGZvciB0aGUgZGVzaWduYXRlZC1pbml0aWFsaXplciBlbnRyaWVzIGluIGRpYWxlY3Qgb3Bjb2RlIHRhYmxlcy4gKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUChvcGMpCXsgLm9wID0gKG9wYyksIC52YWxpZCA9IHRydWUgfQomIzQzOwomIzQzOy8qIFBhcnNlZCBNQ1UgcmVzcG9uc2Ugc3RydWN0dXJlcyAoZGVjb2RlZCBmcm9tIHJ0cHNlX21jdV9tc2cgcmVwbGllcykgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gewomIzQzOwl1OCBtYXhfcG9ydHM7CiYjNDM7CWJvb2wgc3lzdGVtX2VuYWJsZTsKJiM0MzsJdTE2IGRldmljZV9pZDsKJiM0MzsJdTggc3dfdmVyOwomIzQzOwl1OCBtY3VfdHlwZTsKJiM0MzsJdTggY29uZmlnX3N0YXR1czsKJiM0MzsJdTggZXh0X3ZlcjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7CiYjNDM7CXU4IHV2bG87CiYjNDM7CXU4IG92bG87CiYjNDM7CWJvb2wgcHJlYWxsb2NfZW5hYmxlOwomIzQzOwl1OCBudW1fb2ZfcHNlczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgewomIzQzOwl1OCBzdHMxOwomIzQzOwl1OCBzdHMyOwomIzQzOwl1OCBzdHMzOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IHsKJiM0MzsJdTE2IHZvbHRhZ2VfcmF3OwkvKiA2NC40NW1WL0xTQiAqLwomIzQzOwl1MTYgY3VycmVudF9yYXc7CS8qIDFtQS9MU0IgKi8KJiM0MzsJdTE2IHRlbXBlcmF0dXJlX3JhdzsJLyogVChtQykgPSAxMjUwICogKDIyMCAtIHJhdykgKi8KJiM0MzsJdTE2IHBvd2VyX3JhdzsJCS8qIDEwMG1XL0xTQiAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7CiYjNDM7CWJvb2wgZW5hYmxlOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgewomIzQzOwl1OCBtYXhfcG93ZXI7CiYjNDM7CXU4IHByaW9yaXR5OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgb3Bjb2RlW1JUUFNFX01DVV9OVU1fQ01EU107CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlc3BvbnNlIHBhcnNlcnMgZm9yIHRoZSBmaWVsZHMgdGhhdCBkaWZmZXIgYmV0d2VlbiBkaWFsZWN0czsgZWFjaAomIzQzOwkgKiBkaWFsZWN0IHN1cHBsaWVzIGl0cyBvd24uIE90aGVyIHJlc3BvbnNlcyBzaGFyZSBvbmUgbGF5b3V0IGFuZCBhcmUKJiM0MzsJICogZGVjb2RlZCBkaXJlY3RseSAtIGEgZGlhbGVjdCB0aGF0IGRpdmVyZ2VzIHRoZXJlIG11c3QgYWRkIGEgaG9vaywKJiM0MzsJICogYXMgYSBtaXNtYXRjaGVkIGxheW91dCBjYW5ub3QgYmUgZGV0ZWN0ZWQgKHRoZSBjaGVja3N1bSBzdGlsbCBwYXNzZXMpLgomIzQzOwkgKi8KJiM0MzsJdm9pZCAoKnBhcnNlX3N5c3RlbV9pbmZvKShjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKTsKJiM0MzsJaW50ICgqcGFyc2VfcG9ydF9jbGFzcykoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKTsKJiM0MzsJY29uc3QgY2hhciAqKCptY3VfdHlwZV9zdHIpKHVuc2lnbmVkIGludCBtY3VfdHlwZSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyB7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CXUxNiBkZXZpY2VfaWQ7CiYjNDM7CXUzMiBtYXhfbVdfcGVyX3BvcnQ7CiYjNDM7CWVudW0gcnRwc2VfbWN1X2NtZCBwd19zZXRfY21kOwkvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovCiYjNDM7CXUzMiBwd19zZXRfbHNiX21XOwkJLyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovCiYjNDM7CXUzMiBwd19yZWFkX2xzYl9tVzsJCS8qIExTQiBvZiBleHRfY29uZmlnLm1heF9wb3dlciByZWFkLWJhY2ssIGluIG1XICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOGJfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O1JUTDgyMzhCJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDIwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDIwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7CiYjNDM7CS5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzksCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O1JUTDgyMzkmIzM0OywKJiM0MzsJLnB3X3JlYWRfbHNiX21XID0gNDAwLAomIzQzOwkucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDQwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5Y19pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QywKJiM0MzsJLm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLAomIzQzOwkubmFtZSA9ICYjMzQ7UlRMODIzOUMmIzM0OywKJiM0MzsJLnB3X3JlYWRfbHNiX21XID0gNDAwLAomIzQzOwkucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDQwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTExMV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMSwKJiM0MzsJLm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLAomIzQzOwkubmFtZSA9ICYjMzQ7QkNNNTkxMTEmIzM0OywKJiM0MzsJLnB3X3JlYWRfbHNiX21XID0gMjAwLAomIzQzOwkucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsCiYjNDM7CS5wd19zZXRfbHNiX21XID0gMjAwLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7CiYjNDM7CS5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxLAomIzQzOwkvKgomIzQzOwkgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdAomIzQzOwkgKiBhbmQgdGhlIEJDTSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kICgmbHQ7PTUxVyk7CiYjNDM7CSAqIGNhcCBhdCB0aGUgMzBXIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBvZmZlcnMuCiYjNDM7CSAqLwomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtCQ001OTEyMSYjMzQ7LAomIzQzOwkucHdfcmVhZF9sc2JfbVcgPSAyMDAsCiYjNDM7CS5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSAyMDAsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHJ0cHNlX21jdV9jdHJsICp0b19ydHBzZV9tY3VfY3RybChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBjb250YWluZXJfb2YocGNkZXYsIHN0cnVjdCBydHBzZV9tY3VfY3RybCwgcGNkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfbXNnX2luaXQoc3RydWN0IHJ0cHNlX21jdV9tc2cgKm1zZywgdTggb3Bjb2RlKQomIzQzO3sKJiM0MzsJbWVtc2V0KG1zZywgMHhmZiwgc2l6ZW9mKCptc2cpKTsKJiM0MzsJbXNnLSZndDtvcGNvZGUgPSBvcGNvZGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXU4IHN1bSA9IDA7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4tLSkKJiM0MzsJCXN1bSAmIzQzOz0gKmJ1ZiYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiBzdW07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2RvX3hmZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7Y2hlY2tzdW0gPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVxLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKTsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3BzZS0mZ3Q7bXV0ZXgpIHsKJiM0MzsJCXJldCA9IHBzZS0mZ3Q7dHJhbnNwb3J0LSZndDtzZW5kKHBzZSwgcmVxKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgTUNVIG5lZWRzIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiByZWNlaXZpbmcgYSByZXF1ZXN0CiYjNDM7CQkgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0bwomIzQzOwkJICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3YKJiM0MzsJCSAqIHBhdGggc2ltcGxlOiBhIHNpbmdsZSBib3VuZGVkIHdhaXQgcmF0aGVyIHRoYW4gYSBnZW5lcmljIHJldHJ5LgomIzQzOwkJICovCiYjNDM7CQltc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTsKJiM0MzsKJiM0MzsJCW1lbXNldChyZXNwLCAwLCBzaXplb2YoKnJlc3ApKTsKJiM0MzsJCXJldCA9IHBzZS0mZ3Q7dHJhbnNwb3J0LSZndDtyZWN2KHBzZSwgcmVxLCByZXNwKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeHBsaWNpdCBNQ1UgZXJyb3Igb3Bjb2RlcyAob2JzZXJ2ZWQgb24gdGhlIEJDTSBkaWFsZWN0OyBoYXJtbGVzcwomIzQzOwkgKiB0byBjaGVjayBmb3IgUlRMIHRvbykuIENhdGNoIHRoZXNlIGJlZm9yZSB0aGUgZ2VuZXJpYyBvcGNvZGUvQ1JDCiYjNDM7CSAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLgomIzQzOwkgKi8KJiM0MzsJc3dpdGNoIChyZXNwLSZndDtvcGNvZGUpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6CiYjNDM7CQlyZXR1cm4gLUVCQURFOwomIzQzOwljYXNlIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU06CiYjNDM7CQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFk6CiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmVzcC0mZ3Q7b3Bjb2RlICE9IHJlcS0mZ3Q7b3Bjb2RlIHx8CiYjNDM7CSAgICByZXNwLSZndDtzZXFfbnVtICE9IHJlcS0mZ3Q7c2VxX251bSB8fAomIzQzOwkgICAgcmVzcC0mZ3Q7Y2hlY2tzdW0gIT0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpKQomIzQzOwkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9xdWVyeShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwKJiM0MzsJCQkJc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3Bjb2RlKTsKJiM0MzsJcmVxLnBheWxvYWRbMF0gPSBwb3J0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCByZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNwLSZndDtwYXlsb2FkWzBdICE9IHBvcnQpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfY21kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLCB1OCBhcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3Bjb2RlKTsKJiM0MzsJcmVxLnBheWxvYWRbMF0gPSBwb3J0OwomIzQzOwlyZXEucGF5bG9hZFsxXSA9IGFyZzsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogR2xvYmFsIG9wZXJhdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wYy0mZ3Q7b3ApOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9zeXN0ZW1faW5mbyhyZXNwLnBheWxvYWQsIGluZm8pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3BjLSZndDtvcCk7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgJmFtcDtyZXEsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwljb25maWctJmd0O3V2bG8gPSByZXNwLnBheWxvYWRbMF07CiYjNDM7CWNvbmZpZy0mZ3Q7b3ZsbyA9IHJlc3AucGF5bG9hZFs1XTsKJiM0MzsJY29uZmlnLSZndDtwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7CiYjNDM7CWNvbmZpZy0mZ3Q7bnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3BjLSZndDtvcCk7CiYjNDM7CXJlcS5wYXlsb2FkWzBdID0gZW5hYmxlID8gMHgxIDogMHgwOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIChyZXNwLnBheWxvYWRbMF0gPT0gMHgwKSA/IDAgOiAtRUlPOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQb3J0IG9wZXJhdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN0YXR1cy0mZ3Q7c3RzMSA9IHJlc3AucGF5bG9hZFsxXTsKJiM0MzsJc3RhdHVzLSZndDtzdHMyID0gcmVzcC5wYXlsb2FkWzJdOwomIzQzOwlzdGF0dXMtJmd0O3N0czMgPSByZXNwLnBheWxvYWRbM107CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCQkgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW1lYXN1cmVtZW50LSZndDt2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFsxXSk7CiYjNDM7CW1lYXN1cmVtZW50LSZndDtjdXJyZW50X3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFszXSk7CiYjNDM7CW1lYXN1cmVtZW50LSZndDt0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtyZXNwLnBheWxvYWRbNV0pOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7cG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cmVzcC5wYXlsb2FkWzddKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtJmd0O29wLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDtlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCQkgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy0mZ3Q7b3AsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwljb25maWctJmd0O21heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTsKJiM0MzsJY29uZmlnLSZndDtwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBwb3J0LCBvcGMtJmd0O29wLCBlbmFibGUgPyAweDEgOiAweDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQU0UgY29udHJvbGxlciBvcHMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIGNvbmZpZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhwc2UsIGlkLCAmYW1wO2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlhZG1pbl9zdGF0ZS0mZ3Q7YzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDoKJiM0MzsJCQkJCQkgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsCiYjNDM7CQkJCQlzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc3RhdHVzLnN0czEpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6CiYjNDM7CQlwd19zdGF0dXMtJmd0O2MzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRElTQUJMRUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOgomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgJmFtcDtzdGF0dXMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhCiYjNDM7CSAqIGZhdWx0L3Rlc3Qgc3RhdGUgKG9yIGEgY29kZSByZXNlcnZlZCBvbiB0aGUgY3VycmVudCBkaWFsZWN0KSBpdAomIzQzOwkgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpcwomIzQzOwkgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlcwomIzQzOwkgKiB2aWEgdGhlIHBvd2VyIHN0YXR1cy4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAoc3RhdHVzLnN0czEpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzoKJiM0MzsJCXJldHVybiBwc2UtJmd0O2RpYWxlY3QtJmd0O3BhcnNlX3BvcnRfY2xhc3MoJmFtcDtzdGF0dXMpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgJmFtcDttZWFzdXJlbWVudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiAxMDBtVyBwZXIgTFNCICovCiYjNDM7CXJldHVybiBtZWFzdXJlbWVudC5wb3dlcl9yYXcgKiAxMDBVOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50OwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MzIgdVY7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCAmYW1wO21lYXN1cmVtZW50KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIDY0LjQ1bVYgcGVyIExTQiAqLwomIzQzOwl1ViA9IG1lYXN1cmVtZW50LnZvbHRhZ2VfcmF3ICogNjQ0NTBVOwomIzQzOwlyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgJmFtcDtjb25maWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvbmZpZy5tYXhfcG93ZXIgKiBwc2UtJmd0O2NoaXAtJmd0O3B3X3JlYWRfbHNiX21XOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCBpbnQgbWF4X21XKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLSZndDtjaGlwOwomIzQzOwl1OCBwcmdfdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAobWF4X21XICZsdDsgMCB8fCBtYXhfbVcgJmd0OyBjaGlwLSZndDttYXhfbVdfcGVyX3BvcnQpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJdHlwZV9vcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07CiYjNDM7CXZhbF9vcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW2NoaXAtJmd0O3B3X3NldF9jbWRdOwomIzQzOwkvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovCiYjNDM7CWlmICghdHlwZV9vcGMtJmd0O3ZhbGlkIHx8ICF2YWxfb3BjLSZndDt2YWxpZCB8fCAhY2hpcC0mZ3Q7cHdfc2V0X2xzYl9tVykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3dpdGNoIHRoZSBwb3J0IHRvIHVzZXItZGVmaW5lZCBsaW1pdCBtb2RlIGZpcnN0LCB0aGVuIHByb2dyYW0gdGhlCiYjNDM7CSAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpbgomIzQzOwkgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0CiYjNDM7CSAqIHN1Y2Nlc3NmdWwgc2V0X3B3X2xpbWl0IGNhbGwgcmVjb3ZlcnMgaXQuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtJmd0O29wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHJnX3ZhbCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X21XIC8gY2hpcC0mZ3Q7cHdfc2V0X2xzYl9tVywgVThfTUFYKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLSZndDtvcCwgcHJnX3ZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJICAgICAgc3RydWN0IHBzZV9wd19saW1pdF9yYW5nZXMgKm91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX3B3X2xpbWl0X3JhbmdlICpyYW5nZTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJhbmdlWzBdLm1pbiA9IDA7CiYjNDM7CXJhbmdlWzBdLm1heCA9IHBzZS0mZ3Q7Y2hpcC0mZ3Q7bWF4X21XX3Blcl9wb3J0OwomIzQzOwomIzQzOwlvdXQtJmd0O2MzM19wd19saW1pdF9yYW5nZXMgPSByYW5nZTsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsICZhbXA7Y29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBjb25maWcucHJpb3JpdHk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsKJiM0MzsJaWYgKHByaW8gJmd0OyBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy0mZ3Q7b3AsIHByaW8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0gewomIzQzOwkucGlfZ2V0X2FkbWluX3N0YXRlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlLAomIzQzOwkucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsCiYjNDM7CS5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsCiYjNDM7CS5waV9nZXRfYWN0dWFsX3B3ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdywKJiM0MzsJLnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSwKJiM0MzsJLnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLAomIzQzOwkucGlfZ2V0X3ZvbHRhZ2UgPSBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSwKJiM0MzsJLnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCwKJiM0MzsJLnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCwKJiM0MzsJLnBpX2dldF9wd19saW1pdF9yYW5nZXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzLAomIzQzOwkucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbywKJiM0MzsJLnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIGV4dF9jb25maWc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgYm9vdGluZyBNQ1UgbWF5IHN0YXkgc2lsZW50ICgtRVRJTUVET1VUKSwgbm90IEFDSyBpdHMgYWRkcmVzcwomIzQzOwkgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGEKJiM0MzsJICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhCiYjNDM7CSAqIGJvdW5kZWQgd2luZG93OyBvdGhlciBlcnJvcnMgKGUuZy4gLUVPUE5PVFNVUFApIGFyZSBmYXRhbCBhbmQgZmFpbAomIzQzOwkgKiBpbW1lZGlhdGVseS4KJiM0MzsJICovCiYjNDM7CWRlYWRsaW5lID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVMpOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBydHBzZV9tY3VfZ2V0X2luZm8ocHNlLCBpbmZvKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVUSU1FRE9VVCAmYW1wOyZhbXA7IHJldCAhPSAtRU5YSU8gJmFtcDsmYW1wOyByZXQgIT0gLUVSRU1PVEVJTyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmV0ICE9IC1FQUdBSU4gJmFtcDsmYW1wOyByZXQgIT0gLUVCQURNU0cgJmFtcDsmYW1wOyByZXQgIT0gLUVCQURFKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJbXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChpbmZvLSZndDtkZXZpY2VfaWQpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM4Yl9pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM5X2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM5Y19pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMToKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7YmNtNTkxMTFfaW5mbzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6CiYjNDM7CQlwc2UtJmd0O2NoaXAgPSAmYW1wO2JjbTU5MTIxX2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRUlOVkFMLCAmIzM0O3Vua25vd24gUFNFIGlkIDB4JXhcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGluZm8tJmd0O2RldmljZV9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDttYXhfcG9ydHMgfHwgaW5mby0mZ3Q7bWF4X3BvcnRzICZndDsgUlRQU0VfTUNVX01BWF9QT1JUUykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgICYjMzQ7TUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XG4mIzM0OywgaW5mby0mZ3Q7bWF4X3BvcnRzKTsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgJmFtcDtleHRfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZGV2X2luZm8ocHNlLSZndDtkZXYsICYjMzQ7JXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXG4mIzM0OywKJiM0MzsJCSBwc2UtJmd0O2RpYWxlY3QtJmd0O21jdV90eXBlX3N0cihpbmZvLSZndDttY3VfdHlwZSksIHBzZS0mZ3Q7Y2hpcC0mZ3Q7bmFtZSwKJiM0MzsJCSBpbmZvLSZndDtkZXZpY2VfaWQsIGluZm8tJmd0O21heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXJlZ3VsYXRvcl9kaXNhYmxlKGRhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTsKJiM0MzsKJiM0MzsJcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoOwomIzQzOwlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9pbmZvIGluZm87CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtJmd0O2RldiwgJmFtcDtwc2UtJmd0O211dGV4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFtYXRjaCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRU5PREVWLCAmIzM0O21pc3NpbmcgbWF0Y2ggZGF0YVxuJiMzNDspOwomIzQzOwlwc2UtJmd0O2RpYWxlY3QgPSBtYXRjaC0mZ3Q7ZGlhbGVjdDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0CiYjNDM7CSAqIHByb2JlIHRpbWUsIHJhdGhlciB0aGFuIE5VTEwtZGVyZWYmIzM5O2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwc2UtJmd0O2RpYWxlY3QgfHwKJiM0MzsJICAgICFwc2UtJmd0O2RpYWxlY3QtJmd0O3BhcnNlX3N5c3RlbV9pbmZvIHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9wb3J0X2NsYXNzIHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDttY3VfdHlwZV9zdHIpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O2RpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxuJiMzNDspOwomIzQzOwomIzQzOwlwc2UtJmd0O3BvZV9zdXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQocHNlLSZndDtkZXYsICYjMzQ7cG93ZXImIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIocHNlLSZndDtwb2Vfc3VwcGx5KSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCBQVFJfRVJSKHBzZS0mZ3Q7cG9lX3N1cHBseSksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IFBvRSBzdXBwbHlcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtJmd0O2RldiwgJiMzNDtlbmFibGUmIzM0OywgR1BJT0RfT1VUX0hJR0gpOwomIzQzOwlpZiAoSVNfRVJSKGVuYWJsZV9ncGlvKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCBQVFJfRVJSKGVuYWJsZV9ncGlvKSwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW9cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2Rpc2NvdmVyKHBzZSwgJmFtcDtpbmZvKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHNlLSZndDtwb2Vfc3VwcGx5KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQb0Ugc3VwcGx5XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtJmd0O2RldiwgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlLCBwc2UtJmd0O3BvZV9zdXBwbHkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLnN5c3RlbV9lbmFibGUpIHsKJiM0MzsJCXJldCA9IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgdHJ1ZSk7CiYjNDM7CQkvKiBEaWFsZWN0cyB3aXRob3V0IGEgZ2xvYmFsLXN0YXRlIGNvbmNlcHQgKGUuZy4gQkNNKSByZXR1cm4KJiM0MzsJCSAqIC1FT1BOT1RTVVBQOyB0cmVhdCB0aGF0IGFzICYjMzQ7bm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkJiMzNDsuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLSZndDtkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cbiYjMzQ7KTsKJiM0MzsJCWlmICghcmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEZXBlbmRpbmcgb24gdGhlIE1DVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnQKJiM0MzsJICogZm9yIGV2ZXJ5IGJvYXJkKSwgaXQgaXNuJiMzOTt0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yCiYjNDM7CSAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyCiYjNDM7CSAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwkvKiBwY2Rldi5vd25lciBpcyBzZXQgYnkgdGhlIHRyYW5zcG9ydCwgc28gdGhlIHJlZ2lzdGVyZWQgY29udHJvbGxlcgomIzQzOwkgKiBwaW5zIHRoZSB0cmFuc3BvcnQgbW9kdWxlIHRoYXQgb3ducyB0aGUgbGl2ZSBkZXZpY2UsIG5vdCB0aGUgY29yZS4KJiM0MzsJICovCiYjNDM7CXBzZS0mZ3Q7cGNkZXYub3BzICAgICAgPSAmYW1wO3J0cHNlX21jdV9vcHM7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYuZGV2ICAgICAgPSBwc2UtJmd0O2RldjsKJiM0MzsJcHNlLSZndDtwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMzsKJiM0MzsJcHNlLSZndDtwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzOwomIzQzOwlwc2UtJmd0O3BjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTsKJiM0MzsJcHNlLSZndDtwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQzsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocHNlLSZndDtkZXYsICZhbXA7cHNlLSZndDtwY2Rldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O21heF9wb3J0cyA9IHBheWxvYWRbMV07CiYjNDM7CWluZm8tJmd0O3N5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpOwomIzQzOwlpbmZvLSZndDtkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtwYXlsb2FkWzNdKTsKJiM0MzsJaW5mby0mZ3Q7c3dfdmVyID0gcGF5bG9hZFs1XTsKJiM0MzsJaW5mby0mZ3Q7bWN1X3R5cGUgPSBwYXlsb2FkWzZdOwomIzQzOwlpbmZvLSZndDtjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTsKJiM0MzsJaW5mby0mZ3Q7ZXh0X3ZlciA9IHBheWxvYWRbOF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpCiYjNDM7ewomIzQzOwkvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovCiYjNDM7CXJldHVybiBGSUVMRF9HRVQoR0VOTUFTSyg3LCA0KSwgc3RhdHVzLSZndDtzdHMyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKG1jdV90eXBlKSB7CiYjNDM7CWNhc2UgMHgwMDoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjMxMCYjMzQ7OwomIzQzOwljYXNlIDB4MDE6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkYyMzAmIzM0OzsKJiM0MzsJY2FzZSAweDAyOglyZXR1cm4gJiMzNDtHaWdhRGV2aWNlIEdEMzJGMzAzJiMzNDs7CiYjNDM7CWNhc2UgMHgwMzoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjEwMyYjMzQ7OwomIzQzOwljYXNlIDB4MDQ6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkUxMDMmIzM0OzsKJiM0MzsJY2FzZSAweDEwOglyZXR1cm4gJiMzNDtOdXZvdG9uIE0wNTE2JiMzNDs7CiYjNDM7CWNhc2UgMHgxMToJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDU2NCYjMzQ7OwomIzQzOwljYXNlIDB4MTI6CXJldHVybiAmIzM0O051dm90b24gTlVDMDI5JiMzNDs7CiYjNDM7CWRlZmF1bHQ6CXJldHVybiAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJaW5mby0mZ3Q7bWF4X3BvcnRzID0gcGF5bG9hZFsxXTsKJiM0MzsJLyogQkNNIGhhcyBubyBleHBsaWNpdCBzeXN0ZW1fZW5hYmxlIGJ5dGU7IHRoZSBjbG9zZXN0IGFuYWxvZyBpcyB0aGUKJiM0MzsJICogJiMzNDtyZW1vdGUgZW5hYmxlJiMzNDsgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uCiYjNDM7CSAqLwomIzQzOwlpbmZvLSZndDtzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSAmYW1wOyBCSVQoMikpOwomIzQzOwlpbmZvLSZndDtkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtwYXlsb2FkWzNdKTsKJiM0MzsJaW5mby0mZ3Q7c3dfdmVyID0gcGF5bG9hZFs1XTsKJiM0MzsJaW5mby0mZ3Q7bWN1X3R5cGUgPSBwYXlsb2FkWzZdOwomIzQzOwlpbmZvLSZndDtjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTsKJiM0MzsJaW5mby0mZ3Q7ZXh0X3ZlciA9IHBheWxvYWRbOF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjFfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpCiYjNDM7ewomIzQzOwkvKiBCQ00gcHV0cyB0aGUgZGV0ZWN0ZWQgY2xhc3MgaW4gcGF5bG9hZFszXSAoPT0gc3RzMykgZGlyZWN0bHkuCiYjNDM7CSAqIE1hc2sgdG8gdGhlIGxvdyBuaWJibGU7IGNsYXNzIGlzIDAuLjggYW5kIGFueSBoaWdoIGJpdHMgd291bGQgYmUKJiM0MzsJICogbm9pc2UuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gc3RhdHVzLSZndDtzdHMzICZhbXA7IDB4MGY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChtY3VfdHlwZSkgewomIzQzOwljYXNlIDB4MDA6CXJldHVybiAmIzM0O1NUIE1pY3JvIFNUMzJGMTAwJiMzNDs7CiYjNDM7CWNhc2UgMHgwMToJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDV4eCBMQU4mIzM0OzsKJiM0MzsJY2FzZSAweDAyOglyZXR1cm4gJiMzNDtTVCBNaWNybyBTVEYwMzBDOCYjMzQ7OwomIzQzOwljYXNlIDB4MDM6CXJldHVybiAmIzM0O051dm90b24gTTA1OFNBTiYjMzQ7OwomIzQzOwljYXNlIDB4MDQ6CXJldHVybiAmIzM0O051dm90b24gTlVDMTIyJiMzNDs7CiYjNDM7CWRlZmF1bHQ6CXJldHVybiAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4yID0gewomIzQzOwkucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbywKJiM0MzsJLnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcywKJiM0MzsJLm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjJfbWN1X3R5cGVfc3RyLAomIzQzOwkub3Bjb2RlID0gewomIzQzOwkJW1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV0JPSBSVFBTRV9NQ1VfT1AoMHgwMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dCQk9IFJUUFNFX01DVV9PUCgweDQwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXQkJPSBSVFBTRV9NQ1VfT1AoMHg0YSksCiYjNDM7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV0JCT0gUlRQU0VfTUNVX09QKDB4MDEpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF0JPSBSVFBTRV9NQ1VfT1AoMHgxMyksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldCT0gUlRQU0VfTUNVX09QKDB4MTUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXQkJPSBSVFBTRV9NQ1VfT1AoMHg0MiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU10JPSBSVFBTRV9NQ1VfT1AoMHg0NCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDQ4KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddCT0gUlRQU0VfTUNVX09QKDB4NDkpLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0gewomIzQzOwkucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbywKJiM0MzsJLnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2dlbjFfcGFyc2VfcG9ydF9jbGFzcywKJiM0MzsJLm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLAomIzQzOwkub3Bjb2RlID0gewomIzQzOwkJW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXQkJPSBSVFBTRV9NQ1VfT1AoMHgyMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR10JCT0gUlRQU0VfTUNVX09QKDB4MmIpLAomIzQzOwomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdCQk9IFJUUFNFX01DVV9PUCgweDAwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdCT0gUlRQU0VfTUNVX09QKDB4MTYpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldCT0gUlRQU0VfTUNVX09QKDB4MWEpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXQkJPSBSVFBTRV9NQ1VfT1AoMHgyMSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU10JPSBSVFBTRV9NQ1VfT1AoMHgzMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDI1KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddCT0gUlRQU0VfTUNVX09QKDB4MjYpLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGEgPSB7CiYjNDM7CS5kaWFsZWN0ID0gJmFtcDtydHBzZV9tY3VfZGlhbGVjdF9nZW4xLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjFfZGF0YSk7CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2RhdGEgPSB7CiYjNDM7CS5kaWFsZWN0ID0gJmFtcDtydHBzZV9tY3VfZGlhbGVjdF9nZW4yLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfZGF0YSk7CiYjNDM7CiYjNDM7LyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqLwomIzQzO2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YSA9IHsKJiM0MzsJLmRpYWxlY3QgPSAmYW1wO3J0cHNlX21jdV9kaWFsZWN0X2dlbjIsCiYjNDM7CS5uYXRpdmVfaTJjID0gdHJ1ZSwKJiM0Mzt9OwomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhKTsKJiM0MzsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChjb3JlKSYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Sm9uYXMgSmVsb25layAmbHQ7amVsb25lay5qb25hc0BnbWFpbC5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU3MTc2ODRjMGNiZDkwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYwpAQCAtMCwwICYjNDM7MSwxNzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pMmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3JlYWx0ZWstcHNlLW1jdS5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvCiYjNDM7ICogdGhlIHJlc3BvbnNlIGlzIG5vcm1hbGx5IHJlYWR5IG9uIHRoZSB2ZXJ5IGZpcnN0IHJlYWQuIEZvciBjb21tYW5kcyB0aGUKJiM0MzsgKiBNQ1UgcHJvZHVjZXMgbW9yZSBzbG93bHksIGtlZXAgcG9sbGluZyBhdCB0aGUgdHlwaWNhbCByZXNwb25zZSBjYWRlbmNlCiYjNDM7ICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9JMkNfUkVUUllfTVMJUlRQU0VfTUNVX1JFU1BPTlNFX01TCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUwkoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUyAvIFJUUFNFX01DVV9JMkNfUkVUUllfTVMpCiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtJmd0O2Rldik7CiYjNDM7CiYjNDM7CS8qIFNlbmQgb3Bjb2RlIGFzIFNNQnVzIGNvbW1hbmQgYnl0ZTsgcmVtYWluaW5nIDExIGJ5dGVzIGFzIGJsb2NrIGRhdGEgKi8KJiM0MzsJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlcS0mZ3Q7b3Bjb2RlLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxLAomIzQzOwkJCQkJICAgICAgKHU4ICopcmVxICYjNDM7IDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkJICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLSZndDtkZXYpOwomIzQzOwlpbnQgdHJpZXMsIHJldDsKJiM0MzsKJiM0MzsJZm9yICh0cmllcyA9IDA7IHRyaWVzICZsdDsgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHRyaWVzICZndDsgMCkKJiM0MzsJCQltc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7CiYjNDM7CiYjNDM7CQkvKiBNQ1UgbmVlZHMgMHgwMCBhcyBjb21tYW5kIGJ5dGUgZm9yIHJlYWQgKi8KJiM0MzsJCXJldCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGNsaWVudCwgMHgwMCwKJiM0MzsJCQkJCQkgICAgUlRQU0VfTUNVX01TR19TSVpFLAomIzQzOwkJCQkJCSAgICAodTggKilyZXNwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSAmYW1wOyZhbXA7IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19zbWJ1c19vcHMgPSB7CiYjNDM7CS5zZW5kID0gcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kLAomIzQzOwkucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdiwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS0mZ3Q7ZGV2KTsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBpMmNfbWFzdGVyX3NlbmQoKSBtYXkgRE1BLCBzbyB0aGUgYnVmZmVyIG11c3Qgbm90IGJlIG9uIHRoZSBzdGFjay4gKi8KJiM0MzsJYnVmID0ga21lbWR1cChyZXEsIFJUUFNFX01DVV9NU0dfU0laRSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTsKJiM0MzsJa2ZyZWUoYnVmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJCSAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtJmd0O2Rldik7CiYjNDM7CWludCB0cmllcywgcmV0OwomIzQzOwl1OCAqYnVmOwomIzQzOwomIzQzOwkvKiBpMmNfbWFzdGVyX3JlY3YoKSBtYXkgRE1BLCBzbyByZWFkIGludG8gYW4gb2ZmLXN0YWNrIGJ1ZmZlci4gKi8KJiM0MzsJYnVmID0ga21hbGxvYyhSVFBTRV9NQ1VfTVNHX1NJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJ1ZikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgJmx0OyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodHJpZXMgJmd0OyAwKQomIzQzOwkJCW1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTsKJiM0MzsKJiM0MzsJCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJaWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUpIHsKJiM0MzsJCQltZW1jcHkocmVzcCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwkJCWlmIChydHBzZV9tY3VfcmVzcF9pc19maW5hbChyZXEsIHJlc3ApKSB7CiYjNDM7CQkJCXJldCA9IDA7CiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXQgPSAtRVRJTUVET1VUOwomIzQzO291dDoKJiM0MzsJa2ZyZWUoYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7CiYjNDM7CS5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCwKJiM0MzsJLnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2NsaWVudC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTsKJiM0MzsJYm9vbCB1c2VfbmF0aXZlOwomIzQzOwomIzQzOwltYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwomIzQzOwlpZiAoIW1hdGNoKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCAmIzM0O21pc3NpbmcgbWF0Y2ggZGF0YVxuJiMzNDspOwomIzQzOwomIzQzOwkvKiBUaGUgZnJhbWluZyAocmF3IEkyQyB2cyBTTUJ1cykgaXMgY2FycmllZCBieSB0aGUgbWF0Y2ggZGF0YS4gKi8KJiM0MzsJdXNlX25hdGl2ZSA9IG1hdGNoLSZndDtuYXRpdmVfaTJjOwomIzQzOwomIzQzOwlpZiAodXNlX25hdGl2ZSkgewomIzQzOwkJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtJmd0O2FkYXB0ZXIsIEkyQ19GVU5DX0kyQykpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCwKJiM0MzsJCQkJJiMzNDtwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LSZndDthZGFwdGVyLAomIzQzOwkJCQkJICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfAomIzQzOwkJCQkJICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSykpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCwKJiM0MzsJCQkJJiMzNDtTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBzZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwc2UtJmd0O2RldiA9IGRldjsKJiM0MzsJcHNlLSZndDtwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwlwc2UtJmd0O3RyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyAmYW1wO3J0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA6ICZhbXA7cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1cyYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjFfZGF0YSB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cyYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjJfZGF0YSB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMmIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9nZW4yX2kyY19kYXRhIH0sCiYjNDM7CXsgLyogc2VudGluZWwgKi8gfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X2kyY19vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0cHNlX21jdV9pMmNfZHJpdmVyID0gewomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUJCT0gJiMzNDtyZWFsdGVrLXBzZS1tY3UtaTJjJiMzNDssCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUJPSBydHBzZV9tY3VfaTJjX29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUJCT0gcnRwc2VfbWN1X2kyY19wcm9iZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Sm9uYXMgSmVsb25layAmbHQ7amVsb25lay5qb25hc0BnbWFpbC5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOTFjYWRiNTU2OWFiNDQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYwpAQCAtMCwwICYjNDM7MSwxNTUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2VyZGV2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7cmVhbHRlay1wc2UtbWN1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUCTE5MjAwCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoMTAwKQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVAltc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV91YXJ0IHsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsIHBzZTsKJiM0MzsJc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldjsKJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gcnhfZG9uZTsKJiM0MzsJc3BpbmxvY2tfdCByeF9sb2NrOwkJLyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi8KJiM0MzsJc2l6ZV90IHJ4X2xlbjsKJiM0MzsJdTggcnhfYnVmW1JUUFNFX01DVV9NU0dfU0laRV07CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIHRvX3J0cHNlX21jdV91YXJ0KHApICBjb250YWluZXJfb2YocCwgc3RydWN0IHJ0cHNlX21jdV91YXJ0LCBwc2UpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBObyBmcmFtaW5nIGlzIGRvbmUgaGVyZTogYSBnbGl0Y2hlZCBmcmFtZSBjb3N0cyBvbmUgdHJhbnNhY3Rpb24sIHRoZW4KJiM0MzsgKiB0aGUgbmV4dCBfc2VuZCByZS1mcmFtZXMgZnJvbSByeF9sZW4gMC4gUmVzeW5jIHdvcmtzIGJ5IHJldHVybmluZyBjb3VudAomIzQzOyAqIChub3QgdGFrZSksIGRyb3BwaW5nIGFueSBvdmVyZmxvdyBzbyBzZXJkZXYga2VlcHMgbm8gbGVmdG92ZXIgdG8gYmxlZWQKJiM0MzsgKiBpbnRvIHRoZSBuZXh0IGZyYW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzaXplX3QgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2LAomIzQzOwkJCQkgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpOwomIzQzOwlzaXplX3QgdGFrZTsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsICZhbXA7Y3R4LSZndDtyeF9sb2NrKSB7CiYjNDM7CQl0YWtlID0gbWluKGNvdW50LCBzaXplb2YoY3R4LSZndDtyeF9idWYpIC0gY3R4LSZndDtyeF9sZW4pOwomIzQzOwkJaWYgKHRha2UpIHsKJiM0MzsJCQltZW1jcHkoY3R4LSZndDtyeF9idWYgJiM0MzsgY3R4LSZndDtyeF9sZW4sIGJ1ZiwgdGFrZSk7CiYjNDM7CQkJY3R4LSZndDtyeF9sZW4gJiM0Mzs9IHRha2U7CiYjNDM7CQkJaWYgKGN0eC0mZ3Q7cnhfbGVuID09IHNpemVvZihjdHgtJmd0O3J4X2J1ZikpCiYjNDM7CQkJCWNvbXBsZXRlKCZhbXA7Y3R4LSZndDtyeF9kb25lKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBjb25zdW1lIGFsbCB0byBhdm9pZCBkZXN5bmMvbWlzYWxpZ25tZW50ICovCiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0gewomIzQzOwkucmVjZWl2ZV9idWYgPSBydHBzZV9tY3VfdWFydF9yZWNlaXZlLAomIzQzOwkud3JpdGVfd2FrZXVwID0gc2VyZGV2X2RldmljZV93cml0ZV93YWtldXAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7CiYjNDM7CWludCB3cml0dGVuOwomIzQzOwomIzQzOwkvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqLwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7Y3R4LSZndDtyeF9kb25lKTsKJiM0MzsJCWN0eC0mZ3Q7cnhfbGVuID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtJmd0O3NlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksCiYjNDM7CQkJCSAgICAgIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQpOwomIzQzOwlpZiAod3JpdHRlbiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gd3JpdHRlbjsKJiM0MzsJaWYgKHdyaXR0ZW4gIT0gc2l6ZW9mKCpyZXEpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpOwomIzQzOwomIzQzOwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2N0eC0mZ3Q7cnhfZG9uZSwgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVCkpCiYjNDM7CQlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsICZhbXA7Y3R4LSZndDtyeF9sb2NrKSB7CiYjNDM7CQlpZiAoY3R4LSZndDtyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSkKJiM0MzsJCQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJCW1lbWNweShyZXNwLCBjdHgtJmd0O3J4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcyA9IHsKJiM0MzsJLnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLAomIzQzOwkucmVjdiA9IHJ0cHNlX21jdV91YXJ0X3JlY3YsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpCiYjNDM7ewomIzQzOwl1MzIgc3BlZWQgPSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQ7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7c2VyZGV2LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljdHgtJmd0O3NlcmRldiA9IHNlcmRldjsKJiM0MzsJY3R4LSZndDtwc2UuZGV2ID0gZGV2OwomIzQzOwljdHgtJmd0O3BzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwljdHgtJmd0O3BzZS50cmFuc3BvcnQgPSAmYW1wO3J0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHM7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO2N0eC0mZ3Q7cnhfZG9uZSk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7Y3R4LSZndDtyeF9sb2NrKTsKJiM0MzsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7CiYjNDM7CXNlcmRldl9kZXZpY2Vfc2V0X2NsaWVudF9vcHMoc2VyZGV2LCAmYW1wO3J0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtmYWlsZWQgdG8gb3BlbiBzZXJkZXZcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgJiMzNDtjdXJyZW50LXNwZWVkJiMzNDssICZhbXA7c3BlZWQpOwomIzQzOwlzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIHNwZWVkKTsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpOwomIzQzOwlzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpOwomIzQzOwomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3JlZ2lzdGVyKCZhbXA7Y3R4LSZndDtwc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaFtdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMSYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjFfZGF0YSB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMiYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjJfZGF0YSB9LAomIzQzOwl7IC8qIHNlbnRpbmVsICovIH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHsKJiM0MzsJLmRyaXZlciA9IHsKJiM0MzsJCS5uYW1lID0gJiMzNDtyZWFsdGVrLXBzZS1tY3UtdWFydCYjMzQ7LAomIzQzOwkJLm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7CS5wcm9iZSAgPSBydHBzZV9tY3VfdWFydF9wcm9iZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9zZXJkZXZfZGV2aWNlX2RyaXZlcihydHBzZV9tY3VfdWFydF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOWE2ZGEyYzhmMzdkOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaApAQCAtMCwwICYjNDM7MSw5MCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0gKJiM0MzsjZGVmaW5lIF9SRUFMVEVLX1BTRV9NQ1VfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaW1lIHRoZSBNQ1UgaXRzZWxmIG5lZWRzIGJldHdlZW4gYWNjZXB0aW5nIGEgcmVxdWVzdCBhbmQgaGF2aW5nIGEKJiM0MzsgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZQomIzQzOyAqIHVuZGVybHlpbmcgdHJhbnNwb3J0OiB0aGUgY29yZSBwYWNlcyB0cmFuc2FjdGlvbnMgYnkgUlRQU0VfTUNVX1JFU1BPTlNFX01TCiYjNDM7ICogYW5kIGJvdGggdHJhbnNwb3J0cyBzaXplIHRoZWlyIHBlci10cmFuc2FjdGlvbiByZWN2IGNlaWxpbmcgZnJvbQomIzQzOyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXMKJiM0MzsgKiBuZWVkaW5nIHVwIHRvIH4xcyB0byBwcm9kdWNlIGEgcmVwbHkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMJCQkyNQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUwkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZQomIzQzOyAqIGJldHdlZW4gYXR0ZW1wdHMuIFJpZ2h0IGFmdGVyIGVuYWJsZS1ncGlvcyBpcyBhc3NlcnRlZCB0aGUgTUNVIG1heSBub3QKJiM0MzsgKiBhbnN3ZXIgb24gdGhlIGJ1cyB5ZXQ7IGdpdmUgaXQgYSBib3VuZGVkIHdpbmRvdyB0byBjb21lIHVwIGJlZm9yZQomIzQzOyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUwkJMzAwMAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMJCQkxMDAKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRQkJCTEyCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tc2cgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHNlcV9udW07CiYjNDM7CXU4IHBheWxvYWRbOV07CiYjNDM7CXU4IGNoZWNrc3VtOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuCiYjNDM7ICogSU5DT01QTEVURS9CQURfQ1NVTSBhcmUgdGVybWluYWw7IE5PVF9SRUFEWSBpcyB0cmFuc2llbnQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUJCTB4ZmQJLyogLUVCQURFICAgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU0JCTB4ZmUJLyogLUVCQURNU0cgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZCQkweGZmCS8qIC1FQUdBSU4gICovCiYjNDM7CiYjNDM7LyogQSBwb2xsaW5nIHRyYW5zcG9ydCBjYW4gc3RvcCBoZXJlOiB0aGUgbWF0Y2hpbmcgcmVwbHksIG9yIGEgdGVybWluYWwgZXJyb3IuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJCQkgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZXNwLSZndDtvcGNvZGUgPT0gcmVxLSZndDtvcGNvZGUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovCiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0OwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybDsKJiM0MzsKJiM0MzsvKiBQZXItY29tcGF0aWJsZSBtYXRjaCBkYXRhICh0aGUgb2ZfbWF0Y2ggLmRhdGEpLiAqLwomIzQzO3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDsKJiM0MzsJYm9vbCBuYXRpdmVfaTJjOwkvKiByYXctSTJDIGZyYW1pbmcgKHZzIFNNQnVzKTsgSTJDIHRyYW5zcG9ydCBvbmx5ICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgewomIzQzOwlpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7CiYjNDM7CWludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybCB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjsKJiM0MzsJc3RydWN0IG11dGV4IG11dGV4OyAvKiBzZXJpYWxpemVzIE1DVSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zYWN0aW9ucyAqLwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgKnRyYW5zcG9ydDsKJiM0MzsKJiM0MzsJc3RydWN0IHJlZ3VsYXRvciAqcG9lX3N1cHBseTsKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpOwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjFfZGF0YTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2RhdGE7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YTsKJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2ODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVIERyaXZlcioqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IGRyaXZlciBmb3IgYSBSZWFsdGVrIFBTRSBNQ1UsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BzZS1wZC9gLiBUaGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gSXQgc3VwcG9ydHMgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cywgd2hpY2ggbWVhbnMgd2UgY2FuIGxldmVyYWdlIGV4aXN0aW5nIGZ1enppbmcgY2FwYWJpbGl0aWVzIGZvciB0aGVzZSBpbnRlcmZhY2VzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgc3RhbmRhcmQgZmlsZXM6IGRvY3VtZW50YXRpb24sIE1BSU5UQUlORVJTIHVwZGF0ZSwgS2NvbmZpZywgTWFrZWZpbGUsIGFuZCB0aGUgY29yZSBkcml2ZXIgZmlsZXMgKGByZWFsdGVrLXBzZS1tY3UtY29yZS5jYCwgYHJlYWx0ZWstcHNlLW1jdS1pMmMuY2AsIGByZWFsdGVrLXBzZS1tY3UtdWFydC5jYCwgYW5kIHRoZSBoZWFkZXIpLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgaGFuZGxlIHRoaXM/IEdpdmVuIGl0JiMzOTtzIEkyQyBhbmQgVUFSVCwgdGhlIGFuc3dlciBpcyBsaWtlbHkgeWVzLiBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGRldmljZXMgdmlhIGAvZGV2L2kyYy0qYCBvciB2aXJ0dWFsIEkyQyBkZXZpY2VzLCBhbmQgVUFSVCBkZXZpY2VzIHZpYSBgc2VyZGV2YC4gSXQgYWxyZWFkeSBoYXMgSTJDIHN1cHBvcnQsIGluY2x1ZGluZyBmb3IgcHNldWRvLWRldmljZXMuIFRoZSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJMkMgZGV2aWNlcyBjYW4gYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggc3lzZnMgKGBuZXdfZGV2aWNlYCkgb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgYHBzZV9jb250cm9sbGVyX2RldmAsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgYW5kIGV0aHRvb2wgUFNFIGNvbW1hbmRzLiBUaGF0JiMzOTtzIGdvb2QsIHNvIHRoZSBldGh0b29sIGludGVyZmFjZSBjYW4gcmVhY2ggdGhpcyBpZiB0aGUgZGV2aWNlIGlzIGluc3RhbnRpYXRlZC4gVGhpcyBkZWZpbml0ZWx5IGluY3JlYXNlcyBpdHMgZnV6emluZyB2YWx1ZS4KCkZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgbmV3IGRyaXZlciB3aXRoIGZ1bmN0aW9uYWwgY2hhbmdlcywgYSBnb29kIHRhcmdldC4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMuIFdlIGhhdmUgYFBTRV9SRUFMVEVLX01DVWAsIGBQU0VfUkVBTFRFS19NQ1VfSTJDYCwgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scywgdG8gZ3VpZGUgdGhlIGZ1enppbmcgZWZmb3J0LiBMb29raW5nIGF0IGByZWFsdGVrLXBzZS1tY3UtY29yZS5jYCwgd2Ugc2VlIGEgcmFuZ2Ugb2YgZnVuY3Rpb25zOiBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgLCBgcnRwc2VfbWN1X3BvcnRfZW5hYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2Rpc2FibGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdGAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvYCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvYCwgYHJ0cHNlX21jdV9yZWdpc3RlcmAsIGBydHBzZV9tY3VfZG9feGZlcmAsIGBydHBzZV9tY3VfcG9ydF9xdWVyeWAsIGFuZCBgcnRwc2VfbWN1X3BvcnRfY21kYC4KCkZvciBJMkMsIHdlIGhhdmUgYHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZGAsIGBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZGAsIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YCwgYW5kIGBydHBzZV9tY3VfaTJjX3Byb2JlYC4KCkZvciBVQVJULCB3ZSBoYXZlIGBydHBzZV9tY3VfdWFydF9yZWNlaXZlYCwgYHJ0cHNlX21jdV91YXJ0X3NlbmRgLCBgcnRwc2VfbWN1X3VhcnRfcmVjdmAsIGFuZCBgcnRwc2VfbWN1X3VhcnRfcHJvYmVgLgoKVG8gdGFyZ2V0LCBJIHdpbGwgbGlzdCBgUFNFX1JFQUxURUtfTUNVX0kyQ2AgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAgaW4gdGhlIGNvbmZpZ3MuCgpGb3IgZnV6emluZyBmb2N1cyBzeW1ib2xzLCBJIHdpbGwgcHJpb3JpdGl6ZSB0aGVzZSBmdW5jdGlvbnMsIGZvciBub3cuCgpMZXQmIzM5O3MgbGlzdCB0aGVzZSBjb25maWdzIHRvIGVuc3VyZSB0aGlzIGlzIGVhc3kgdG8gcmVwcm9kdWNlOgoqICAgYFBTRV9SRUFMVEVLX01DVV9JMkNgCiogICBgUFNFX1JFQUxURUtfTUNVX1VBUlRgCgpBbmQgSSYjMzk7bGwgdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcyBmdXp6aW5nIHRhcmdldHM6CiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgCiogICBgcnRwc2VfbWN1X3BvcnRfZW5hYmxlYAoqICAgYHJ0cHNlX21jdV9wb3J0X2Rpc2FibGVgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YAoqICAgYHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdGAKKiAgIGBydHBzZV9tCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQU0VfUkVBTFRFS19NQ1UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc9MTQ9aWYgUFNFX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTE1LVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MTY6Y29uZmlnIFBTRV9SRUFMVEVLX01DVVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMTctXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MjI6Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9JMkNcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcJiMzNDtcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTI0LVx0ZGVwZW5kcyBvbiBJMkNcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjI1Olx0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzItXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzozMzpjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlRcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTM0LVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCYjMzQ7XG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0zNS1cdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVNcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjM2Olx0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSAmIzQzOz0gcHNlX2NvcmUub1xuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWNvcmUub1xuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkMpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVCkgJiM0Mzs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZS05LW9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSAmIzQzOz0gcHNlX3JlZ3VsYXRvci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NzMKCQkJCQkJCW91dHB1dDogNDExCgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWx0ZWsgUFNFIE1DVSBEcml2ZXIgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IGl0JiMzOTtzIHN0cnVjdHVyZWQ6IGl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggbWVhbnMgdXNlcnNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHVzaW5nIG5ldGxpbmsuIFRoYXQmIzM5O3MgZ29vZCwga2VlcHMgaXQgbWFuYWdlYWJsZSBhbmQgZmxleGlibGUuIEkgc2VlIHRoYXQgaW5zdGFudGlhdGlvbiBjYW4gYmUgZG9uZSBlaXRoZXIgdGhyb3VnaCBJMkMgb3Igc2VyZGV2LiBNYWtlcyBzZW5zZTsgZ29vZCBkZXNpZ24gY2hvaWNlIGZvciBmbGV4aWJpbGl0eSBpbiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgUFNFX1JFQUxURUtfTUNVX0kyQ2AgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAsIHdoaWNoIGFyZSB3aGF0IEkmIzM5O2QgZXhwZWN0LgoKTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb3JlIGNvbXBvbmVudHMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBjbGVhciBvbiB0aGUga2V5IHN5bWJvbHM6IHRoZSBQU0UgY29udHJvbGxlciBvcHMgYW5kIHRoZSB0cmFuc3BvcnQgb3BzLiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW52b2x2ZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcuCgpBaCwgaGVyZSYjMzk7cyBhIGRldGFpbGVkIGxpc3QgdGhhdCBJIHdpbGwgdXNlIGFzIG15IGNvcmUgdW5kZXJzdGFuZGluZyBvZiBmdW5jdGlvbmFsaXR5OgoKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c2AKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd2AKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZWAKKiAgIGBydHBzZV9tY3VfcG9ydF9lbmFibGVgCiogICBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWAKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRgCiogICBgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0YAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW9gCiogICBgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9gCiogICBgcnRwc2VfbWN1X2RvX3hmZXJgCiogICBgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kYAoqICAgYHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdmAKKiAgIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kYAoqICAgYHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3ZgCiogICBgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZWAKKiAgIGBydHBzZV9tY3VfdWFydF9zZW5kYAoqICAgYHJ0cHNlX21jdV91YXJ0X3JlY3ZgCgpUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBicmVha2Rvd24gb2YgdGhlIGZ1bmN0aW9uYWxpdHksIGNvdmVyaW5nIHBvd2VyIG1hbmFnZW1lbnQsIGFuZCBjb21tdW5pY2F0aW9uIGludGVyZmFjZXMuIE5vdywgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gYmUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfUkVBTFRFS19NQ1VfSTJDJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9VQVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9kb194ZmVyJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfc21idXNfc2VuZCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3YmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfc2VuZCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9yZWN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdmlhIEkyQyBvciBVQVJULiBJdCBpbXBsZW1lbnRzIHRoZSBldGh0b29sIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBQU0Ugb3BlcmF0aW9ucyBhbmQgdGhlIHRyYW5zcG9ydCBsYXllciBpbXBsZW1lbnRhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2RvX3hmZXImIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfc21idXNfcmVjdiYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjQyOjI1LjE1NjU4Mzg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwNzc3OTIyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2RvX3hmZXJcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfc21idXNfc2VuZFwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2XCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2XCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWNlaXZlXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6NDI6MjUuMTU2NTkwODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTMyNjU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRmNDhmNGJmY2RmYTMwZTUyN2RlZjQ0ZGFhMmZmYTlkN2FjOWRmMTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTY6NDI6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczMzMwNjE5M2RiNTdlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXFxuQEAgLTAsMCArMSwxNzYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBSZWFsdGVrIFBTRSBNQ1VcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gSm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjogfFxcbisgIEEgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgbWFuYWdlcyB0aGUgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpXFxuKyAgaGFyZHdhcmUgb24gYSByYW5nZSBvZiBtYW5hZ2VkIFBvRSBzd2l0Y2hlcy4gVGhlIGhvc3QgQ1BVIHRhbGtzIG9ubHkgdG9cXG4rICB0aGlzIE1DVSAtIG92ZXIgSTJDL1NNQnVzIG9yIFVBUlQgLSB1c2luZyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7XFxuKyAgdGhlIFBTRSBzaWxpY29uIGl0IGRyaXZlcyBzaXRzIGJlaGluZCB0aGUgTUNVIGFuZCBpcyBuZXZlciBhY2Nlc3NlZFxcbisgIGRpcmVjdGx5LiBGb3IgZXhhbXBsZSwgb24gdGhlIFp5eGVsIEdTMTkwMC0xMEhQIHRoZSBTb0MgcmVhY2hlcyB0aGUgTUNVXFxuKyAgb3ZlciBVQVJULCBhbmQgdGhlIE1DVSBtYW5hZ2VzIHRoZSBvbi1ib2FyZCBQU0UgY2hpcC5cXG4rXFxuKyAgVGhpcyBiaW5kaW5nIGRlc2NyaWJlcyB0aGUgTUNVIHRvZ2V0aGVyIHdpdGggaXRzIFJlYWx0ZWsgZmlybXdhcmU6IHRoZVxcbisgIGZpcm13YXJlIGFuZCBpdHMgaG9zdCBwcm90b2NvbCwgd2hpY2ggYXJlIHN0YWJsZSBhY3Jvc3MgYm9hcmRzLiBUaGVcXG4rICBtaWNyb2NvbnRyb2xsZXIgc2lsaWNvbiBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJ0IHRoYXQgdmFyaWVzLCBhbmQgdGhlXFxuKyAgUFNFIHNpbGljb24gYmVoaW5kIHRoZSBNQ1UgKFJlYWx0ZWsgUlRMODIzeC9SVEw4MjM5KiBvciBCcm9hZGNvbVxcbisgIEJDTTU5eHh4KSBpcyByZXBvcnRlZCBieSB0aGUgTUNVIGFuZCBkZXRlY3RlZCBhdCBydW50aW1lIC0gbmVpdGhlciBpc1xcbisgIG5hbWVkIGhlcmUuXFxuK1xcbisgIFR3byBwcm90b2NvbCBnZW5lcmF0aW9ucyBleGlzdCwgYm90aCBSZWFsdGVrJ3M6XFxuKyAgICBnZW4xICBvbGRlciBib2FyZHMsIHdoZXJlIHRoZSBNQ1UgZnJvbnRzIEJyb2FkY29tIFBTRSBzaWxpY29uXFxuKyAgICBnZW4yICB0aGUgYWx0ZXJlZCBwcm90b2NvbCB1c2VkIHdpdGggUmVhbHRlaydzIG93biBQU0Ugc2lsaWNvblxcbitcXG4rICBPbiBhbiBJMkMgYXR0YWNobWVudCB0aGUgZnJhbWluZyB0aGUgTUNVIGZpcm13YXJlIGV4cGVjdHMgaXMgcGFydCBvZiB0aGVcXG4rICBjb21wYXRpYmxlOiAnLXNtYnVzJyAocmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSBhbmQgYSByZXBlYXRlZFxcbisgIHN0YXJ0KSBvciAnLWkyYycgKGJhcmUgYmxvY2sgd3JpdGVzIGFuZCByZWFkcykuIEEgVUFSVCBhdHRhY2htZW50IGNhcnJpZXNcXG4rICBubyBmcmFtaW5nIHN1ZmZpeDsgdGhlIHRyYW5zcG9ydCBpcyBnaXZlbiBieSB0aGUgcGFyZW50ICdzZXJpYWwnIG5vZGUuXFxuK1xcbisgIEVhY2ggYm9hcmQgYWRkaXRpb25hbGx5IGNhcnJpZXMgYSBkZXZpY2Utc3BlY2lmaWMgY29tcGF0aWJsZSB0aGF0IGZhbGxzXFxuKyAgYmFjayB0byBvbmUgb2YgdGhlIHByb3RvY29sIGNvbXBhdGlibGVzIGFib3ZlLiBEcml2ZXJzIGJpbmQgb24gdGhlXFxuKyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kXFxuKyAgcmVzZXJ2ZXMgYSBwbGFjZSBmb3IgYSBmdXR1cmUgcGVyLWJvYXJkIHF1aXJrIHdpdGhvdXQgaGF2aW5nIHRvIHJldHJvZml0XFxuKyAgZGV2aWNlIHRyZWVzIGFscmVhZHkgaW4gdGhlIGZpZWxkLlxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgb25lT2Y6XFxuKyAgICAgICMgVUFSVFxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYTEtcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMVxcbitcXG4rICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcXG4rICAgICAgLSBpdGVtczpcXG4rICAgICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkyMC0yNGhwLXYyLXBzZVxcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjEtc21idXNcXG4rXFxuKyAgICAgICMgVUFSVFxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYjEtcHNlXFxuKyAgICAgICAgICAgICAgLSB6eXhlbCx4bWcxOTE1LTEwZXAtcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMlxcbitcXG4rICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcXG4rICAgICAgLSBpdGVtczpcXG4rICAgICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgICAgICAtIHp5eGVsLHhzMTkzMC0xMmhwLXBzZVxcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcXG4rXFxuKyAgICAgICMgSTJDLCByYXcgZnJhbWluZ1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gbGlua3N5cyxsZ3MzMjhtcGMtdjItcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgcG93ZXItc3VwcGx5OlxcbisgICAgZGVzY3JpcHRpb246IFJlZ3VsYXRvciBzdXBwbHlpbmcgdGhlIFBvRSBwb3dlciByYWlsLlxcbitcXG4rICBlbmFibGUtZ3Bpb3M6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rICAjIEEgJy1zbWJ1cycvJy1pMmMnIGNvbXBhdGlibGUgaXMgYW4gSTJDIGF0dGFjaG1lbnQ6IGl0IGhhcyAncmVnJyBhbmRcXG4rICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlRcXG4rICAjIGF0dGFjaG1lbnQ6IG5vICdyZWcnLCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXFxuKyAgICB0aGVuOlxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIHJlZ1xcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXFxuKyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxcbisgICAgZWxzZTpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6IGZhbHNlXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudFxcbisgIC0gfFxcbisgICAgaTJjIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ6eXhlbCx4czE5MzAtMTJocC1wc2VcXFwiLCBcXFwicmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XFxuKyAgLSB8XFxuKyAgICBpMmMge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZVxcXCIsIFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBVQVJUIGF0dGFjaG1lbnRcXG4rICAtIHxcXG4rICAgIHNlcmlhbCB7XFxuKyAgICAgICAgZXRoZXJuZXQtcHNlIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcXFwiLCBcXFwicmVhbHRlayxwc2UtbWN1LWdlbjFcXFwiO1xcbisgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gXFx1MDAzYzE5MjAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIHBzZS1waXMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLjNiMjFlNDZiZTY4YTFmIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjI3MTYsNiArMjI3MTYsMTMgQEAgUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0aW5jbHVkZS9zb3VuZC9ydCouaFxcbiBGOlxcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXFxuIFxcbitSRUFMVEVLIFBTRSBNQ1UgRFJJVkVSXFxuK006XFx0Sm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UqXFxuK1xcbiBSRUFMVEVLIE9UVE8gV0FUQ0hET0dcXG4gTTpcXHRTYW5kZXIgVmFuaGV1bGUgXFx1MDAzY3NhbmRlckBzdmFuaGV1bGUubmV0XFx1MDAzZVxcbiBMOlxcdGxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXFxuaW5kZXggN2VmMjk2NTdlZTVkZDEuLmEwZjJhZTY2OGM2N2M4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxcbiBcXG4gaWYgUFNFX0NPTlRST0xMRVJcXG4gXFxuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VcXG4rXFx0dHJpc3RhdGVcXG4rXFx0aGVscFxcbitcXHQgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVIGRyaXZlci4gVGhpcyBpcyBzZWxlY3RlZFxcbitcXHQgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxcbitcXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVV9JMkNcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXFxcIlxcbitcXHRkZXBlbmRzIG9uIEkyQ1xcbitcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuK1xcdGhlbHBcXG4rXFx0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxcbitcXHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxcbitcXHQgIHZpYSBJMkMvU01CdXMuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWxcXG4rXFx0ICBQU0Ugc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYVxcbitcXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLlxcbitcXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUXFxuK1xcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcXFwiXFxuK1xcdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVNcXG4rXFx0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxcbitcXHRoZWxwXFxuK1xcdCAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0VcXG4rXFx0ICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWRcXG4rXFx0ICB2aWEgVUFSVC4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbCBQU0VcXG4rXFx0ICBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXFxuK1xcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LlxcbitcXG4gY29uZmlnIFBTRV9SRUdVTEFUT1JcXG4gXFx0dHJpc3RhdGUgXFxcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclxcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcXG5pbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXFxuQEAgLTMsNiArMyw5IEBAXFxuIFxcbiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICs9IHBzZV9jb3JlLm9cXG4gXFxuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICs9IHJlYWx0ZWstcHNlLW1jdS1jb3JlLm9cXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkMpICs9IHJlYWx0ZWstcHNlLW1jdS1pMmMub1xcbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX1VBUlQpICs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cXG4gb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICs9IHBzZV9yZWd1bGF0b3Iub1xcbiBvYmotJChDT05GSUdfUFNFX1BENjkyWDApICs9IHBkNjkyeDAub1xcbiBvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBhNWJiNzg0MzYwYTVlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXFxuQEAgLTAsMCArMSw5OTMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXNcXG4rICogUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLiBUaGUgTUNVIHNwZWFrcyBhIDEyLWJ5dGUgZml4ZWQtZnJhbWVcXG4rICogbWFuYWdlbWVudCBwcm90b2NvbDsgdGhpcyBkcml2ZXIgY292ZXJzIHR3byBnZW5lcmF0aW9ucyBvZiB0aGVcXG4rICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLlxcbisgKlxcbisgKiBNYW55IFBvRSBzd2l0Y2ggZGVzaWducyBwdXQgYSBkZWRpY2F0ZWQgbWljcm9jb250cm9sbGVyIGluIGZyb250IG9mIHRoZVxcbisgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yXFxuKyAqIFVBUlQsIGFuZCB0aGUgTUNVIGluIHR1cm4gbWFuYWdlcyB0aGUgUFNFIGNoaXBzIG9uIHRoZSBib2FyZC4gVGhlIE1DVVxcbisgKiBzcGVha3MgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdFxcbisgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxcbisgKlxcbisgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuXFxuKyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmVcXG4rICogdGhlIE1DVSBmcm9udHMgYW5kIG1hbmFnZXMgQnJvYWRjb20gUFNFIHNpbGljb247IEdlbjIgYmVpbmcgdXNlZCB3aXRoXFxuKyAqIFJlYWx0ZWsgUFNFIHNpbGljb24uIFRoZSB0d28gc2hhcmUgZnJhbWUgZm9ybWF0IGFuZCBhIHN1bS1tb2QtMjU2XFxuKyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzO1xcbisgKiB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIHBlci1kaWFsZWN0IG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLlxcbisgKlxcbisgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcXG4rICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbFxcbisgKiBmYW1pbHksIGFuZCBcXFwiZHVtYiBQU0VcXFwiIG1vZGVzIHdoZXJlIG5vIGhvc3QgY29udHJvbCBpcyB3aXJlZCB1cCBhdCBhbGwuXFxuKyAqXFxuKyAqIFRoaXMgY29yZSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wsIGRlY29kaW5nL2VuY29kaW5nIG9mIE1DVVxcbisgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlc1xcbisgKiAocmVhbHRlay1wc2UtbWN1LWkyYywgcmVhbHRlay1wc2UtbWN1LXVhcnQpIHByb3ZpZGUgdGhlIHNlbmQvcmVjdlxcbisgKiBjYWxsYmFja3MuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaWZmaWVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taW5tYXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwicmVhbHRlay1wc2UtbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcXHRcXHQweDAxMzhcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcXHRcXHQweDAwMzlcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDXFx0XFx0MHgwMTM5XFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVxcdFxcdDB4ZTExMVxcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcXHRcXHQweGUxMjFcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEXFx0XFx0MHgwMFxcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkdcXHRcXHQweDAxXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcXHRcXHQweDAyXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1RcXHRcXHRcXHQweDAzXFx0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUXFx0XFx0MHgwNFxcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVFxcdFxcdDB4MDVcXHQvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1xcdFxcdDB4MDZcXG4rXFxuKy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUU1xcdFxcdFxcdDQ4XFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXFx0XFx0M1xcbitcXG4rZW51bSBydHBzZV9tY3VfY21kIHtcXG4rXFx0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxcbitcXHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcXG4rXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9FTkFCTEUsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxcbitcXG4rXFx0UlRQU0VfTUNVX05VTV9DTURTLFxcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUge1xcbitcXHR1OCBvcDtcXG4rXFx0Ym9vbCB2YWxpZDtcXG4rfTtcXG4rXFxuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcXHR7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH1cXG4rXFxuKy8qIFBhcnNlZCBNQ1UgcmVzcG9uc2Ugc3RydWN0dXJlcyAoZGVjb2RlZCBmcm9tIHJ0cHNlX21jdV9tc2cgcmVwbGllcykgKi9cXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XFxuK1xcdHU4IG1heF9wb3J0cztcXG4rXFx0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1OCBzd192ZXI7XFxuK1xcdHU4IG1jdV90eXBlO1xcbitcXHR1OCBjb25maWdfc3RhdHVzO1xcbitcXHR1OCBleHRfdmVyO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcXG4rXFx0dTggdXZsbztcXG4rXFx0dTggb3ZsbztcXG4rXFx0Ym9vbCBwcmVhbGxvY19lbmFibGU7XFxuK1xcdHU4IG51bV9vZl9wc2VzO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XFxuK1xcdHU4IHN0czE7XFxuK1xcdHU4IHN0czI7XFxuK1xcdHU4IHN0czM7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xcbitcXHR1MTYgdm9sdGFnZV9yYXc7XFx0LyogNjQuNDVtVi9MU0IgKi9cXG4rXFx0dTE2IGN1cnJlbnRfcmF3O1xcdC8qIDFtQS9MU0IgKi9cXG4rXFx0dTE2IHRlbXBlcmF0dXJlX3JhdztcXHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xcbitcXHR1MTYgcG93ZXJfcmF3O1xcdFxcdC8qIDEwMG1XL0xTQiAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XFxuK1xcdGJvb2wgZW5hYmxlO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcge1xcbitcXHR1OCBtYXhfcG93ZXI7XFxuK1xcdHU4IHByaW9yaXR5O1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgb3Bjb2RlW1JUUFNFX01DVV9OVU1fQ01EU107XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcXG4rXFx0ICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlXFxuK1xcdCAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssXFxuK1xcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7XFxuK1xcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XFxuK1xcdGNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8ge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1MzIgbWF4X21XX3Blcl9wb3J0O1xcbitcXHRlbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDtcXHQvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovXFxuK1xcdHUzMiBwd19zZXRfbHNiX21XO1xcdFxcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xcbitcXHR1MzIgcHdfcmVhZF9sc2JfbVc7XFx0XFx0LyogTFNCIG9mIGV4dF9jb25maWcubWF4X3Bvd2VyIHJlYWQtYmFjaywgaW4gbVcgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM4Yl9pbmZvID0ge1xcbitcXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QixcXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJSVEw4MjM4QlxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxcbitcXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzksXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiUlRMODIzOVxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSA0MDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiUlRMODIzOUNcXFwiLFxcbitcXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXFxuK1xcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gNDAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTExX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExLFxcbitcXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXFxuK1xcdC5uYW1lID0gXFxcIkJDTTU5MTExXFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gMjAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxLFxcbitcXHQvKlxcbitcXHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxcbitcXHQgKiBhbmQgdGhlIEJDTSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kIChcXHUwMDNjPTUxVyk7XFxuK1xcdCAqIGNhcCBhdCB0aGUgMzBXIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBvZmZlcnMuXFxuK1xcdCAqL1xcbitcXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXFxuK1xcdC5uYW1lID0gXFxcIkJDTTU5MTIxXFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gMjAwLFxcbit9O1xcbitcXG4rLyogSGVscGVycyBhbmQgYmFzaWMgZnVuY3Rpb25zICovXFxuK1xcbitzdGF0aWMgc3RydWN0IHJ0cHNlX21jdV9jdHJsICp0b19ydHBzZV9tY3VfY3RybChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4re1xcbitcXHRyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwsIHBjZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X21zZ19pbml0KHN0cnVjdCBydHBzZV9tY3VfbXNnICptc2csIHU4IG9wY29kZSlcXG4re1xcbitcXHRtZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpO1xcbitcXHRtc2ctXFx1MDAzZW9wY29kZSA9IG9wY29kZTtcXG4rfVxcbitcXG4rc3RhdGljIHU4IHJ0cHNlX21jdV9jaGVja3N1bShjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHU4IHN1bSA9IDA7XFxuK1xcbitcXHR3aGlsZSAobGVuLS0pXFxuK1xcdFxcdHN1bSArPSAqYnVmKys7XFxuK1xcdHJldHVybiBzdW07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2RvX3hmZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJlcS1cXHUwMDNlY2hlY2tzdW0gPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVxLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnBzZS1cXHUwMDNlbXV0ZXgpIHtcXG4rXFx0XFx0cmV0ID0gcHNlLVxcdTAwM2V0cmFuc3BvcnQtXFx1MDAzZXNlbmQocHNlLCByZXEpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdFxcbitcXHRcXHQgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0b1xcbitcXHRcXHQgKiB1cy4gUGFjZSB0aGUgdHJhbnNhY3Rpb24gaGVyZSBzbyBlYWNoIHRyYW5zcG9ydCBjYW4ga2VlcCBpdHMgcmVjdlxcbitcXHRcXHQgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1zbGVlcChSVFBTRV9NQ1VfUkVTUE9OU0VfTVMpO1xcbitcXG4rXFx0XFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xcbitcXHRcXHRyZXQgPSBwc2UtXFx1MDAzZXRyYW5zcG9ydC1cXHUwMDNlcmVjdihwc2UsIHJlcSwgcmVzcCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4cGxpY2l0IE1DVSBlcnJvciBvcGNvZGVzIChvYnNlcnZlZCBvbiB0aGUgQkNNIGRpYWxlY3Q7IGhhcm1sZXNzXFxuK1xcdCAqIHRvIGNoZWNrIGZvciBSVEwgdG9vKS4gQ2F0Y2ggdGhlc2UgYmVmb3JlIHRoZSBnZW5lcmljIG9wY29kZS9DUkNcXG4rXFx0ICogbWlzbWF0Y2ggcGF0aCBzbyBjYWxsZXJzIHNlZSBhIG1lYW5pbmdmdWwgZXJybm8uXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2ggKHJlc3AtXFx1MDAzZW9wY29kZSkge1xcbitcXHRjYXNlIFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURTpcXG4rXFx0XFx0cmV0dXJuIC1FQkFERTtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOlxcbitcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFk6XFxuK1xcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmVzcC1cXHUwMDNlb3Bjb2RlICE9IHJlcS1cXHUwMDNlb3Bjb2RlIHx8XFxuK1xcdCAgICByZXNwLVxcdTAwM2VzZXFfbnVtICE9IHJlcS1cXHUwMDNlc2VxX251bSB8fFxcbitcXHQgICAgcmVzcC1cXHUwMDNlY2hlY2tzdW0gIT0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpKVxcbitcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9xdWVyeShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wY29kZSk7XFxuK1xcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgcmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocmVzcC1cXHUwMDNlcGF5bG9hZFswXSAhPSBwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGNvZGUpO1xcbitcXHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XFxuK1xcdHJlcS5wYXlsb2FkWzFdID0gYXJnO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocmVzcC5wYXlsb2FkWzBdICE9IHBvcnQgfHwgcmVzcC5wYXlsb2FkWzFdICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIEdsb2JhbCBvcGVyYXRpb25zICovXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wYy1cXHUwMDNlb3ApO1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgKmNvbmZpZylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wYy1cXHUwMDNlb3ApO1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNldXZsbyA9IHJlc3AucGF5bG9hZFswXTtcXG4rXFx0Y29uZmlnLVxcdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xcbitcXHRjb25maWctXFx1MDAzZXByZWFsbG9jX2VuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMHgxKTtcXG4rXFx0Y29uZmlnLVxcdTAwM2VudW1fb2ZfcHNlcyA9IHJlc3AucGF5bG9hZFs2XTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3BjLVxcdTAwM2VvcCk7XFxuK1xcdHJlcS5wYXlsb2FkWzBdID0gZW5hYmxlID8gMHgxIDogMHgwO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XFxuK31cXG4rXFxuKy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzdGF0dXMtXFx1MDAzZXN0czEgPSByZXNwLnBheWxvYWRbMV07XFxuK1xcdHN0YXR1cy1cXHUwMDNlc3RzMiA9IHJlc3AucGF5bG9hZFsyXTtcXG4rXFx0c3RhdHVzLVxcdTAwM2VzdHMzID0gcmVzcC5wYXlsb2FkWzNdO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRtZWFzdXJlbWVudC1cXHUwMDNldm9sdGFnZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXFx1MDAyNnJlc3AucGF5bG9hZFsxXSk7XFxuK1xcdG1lYXN1cmVtZW50LVxcdTAwM2VjdXJyZW50X3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cmVzcC5wYXlsb2FkWzNdKTtcXG4rXFx0bWVhc3VyZW1lbnQtXFx1MDAzZXRlbXBlcmF0dXJlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cmVzcC5wYXlsb2FkWzVdKTtcXG4rXFx0bWVhc3VyZW1lbnQtXFx1MDAzZXBvd2VyX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cmVzcC5wYXlsb2FkWzddKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgKmNvbmZpZylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNlZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAxKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2VtYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107XFxuK1xcdGNvbmZpZy1cXHUwMDNlcHJpb3JpdHkgPSByZXNwLnBheWxvYWRbNF07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBlbmFibGUgPyAweDEgOiAweDApO1xcbit9XFxuK1xcbisvKiBQU0UgY29udHJvbGxlciBvcHMgKi9cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHBzZV9hZG1pbl9zdGF0ZSAqYWRtaW5fc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhwc2UsIGlkLCBcXHUwMDI2Y29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGFkbWluX3N0YXRlLVxcdTAwM2VjMzNfYWRtaW5fc3RhdGUgPSBjb25maWcuZW5hYmxlID8gRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQgOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcXHUwMDI2c3RhdHVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ERUxJVkVSSU5HO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1RFU1Q7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFQ6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19PVEhFUkZBVUxUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1VOS05PV047XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3Moc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFxcdTAwMjZzdGF0dXMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhXFxuK1xcdCAqIGZhdWx0L3Rlc3Qgc3RhdGUgKG9yIGEgY29kZSByZXNlcnZlZCBvbiB0aGUgY3VycmVudCBkaWFsZWN0KSBpdFxcbitcXHQgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpc1xcbitcXHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlc1xcbitcXHQgKiB2aWEgdGhlIHBvd2VyIHN0YXR1cy5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzpcXG4rXFx0XFx0cmV0dXJuIHBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyhcXHUwMDI2c3RhdHVzKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcXHUwMDI2bWVhc3VyZW1lbnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogMTAwbVcgcGVyIExTQiAqL1xcbitcXHRyZXR1cm4gbWVhc3VyZW1lbnQucG93ZXJfcmF3ICogMTAwVTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgbWVhc3VyZW1lbnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcdHUzMiB1VjtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcXHUwMDI2bWVhc3VyZW1lbnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogNjQuNDVtViBwZXIgTFNCICovXFxuK1xcdHVWID0gbWVhc3VyZW1lbnQudm9sdGFnZV9yYXcgKiA2NDQ1MFU7XFxuK1xcdHJldHVybiBtaW5fdCh1MzIsIHVWLCBJTlRfTUFYKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIGZhbHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXFx1MDAyNmNvbmZpZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gY29uZmlnLm1heF9wb3dlciAqIHBzZS1cXHUwMDNlY2hpcC1cXHUwMDNlcHdfcmVhZF9sc2JfbVc7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLVxcdTAwM2VjaGlwO1xcbitcXHR1OCBwcmdfdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKG1heF9tVyBcXHUwMDNjIDAgfHwgbWF4X21XIFxcdTAwM2UgY2hpcC1cXHUwMDNlbWF4X21XX3Blcl9wb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdHR5cGVfb3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07XFxuK1xcdHZhbF9vcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbY2hpcC1cXHUwMDNlcHdfc2V0X2NtZF07XFxuK1xcdC8qIHB3X3NldF9sc2JfbVcgaXMgdGhlIGRpdmlzb3IgYmVsb3c7IHJlamVjdCBhIGNoaXAgdGhhdCBsYWNrcyBpdC4gKi9cXG4rXFx0aWYgKCF0eXBlX29wYy1cXHUwMDNldmFsaWQgfHwgIXZhbF9vcGMtXFx1MDAzZXZhbGlkIHx8ICFjaGlwLVxcdTAwM2Vwd19zZXRfbHNiX21XKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcXG4rXFx0ICogbGltaXQgdmFsdWUuIElmIHRoZSBzZWNvbmQgY21kIGZhaWxzLCB0aGUgcG9ydCBpcyBsZWZ0IGluXFxuK1xcdCAqIHVzZXItZGVmaW5lZCBtb2RlIGJ1dCB3aXRoIHRoZSBwcmV2aW91cyBsaW1pdCB2YWx1ZTsgdGhlIG5leHRcXG4rXFx0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB0eXBlX29wYy1cXHUwMDNlb3AsIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwcmdfdmFsID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfbVcgLyBjaGlwLVxcdTAwM2Vwd19zZXRfbHNiX21XLCBVOF9NQVgpO1xcbitcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLVxcdTAwM2VvcCwgcHJnX3ZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX3B3X2xpbWl0X3JhbmdlICpyYW5nZTtcXG4rXFxuK1xcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlKTtcXG4rXFx0aWYgKCFyYW5nZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyYW5nZVswXS5taW4gPSAwO1xcbitcXHRyYW5nZVswXS5tYXggPSBwc2UtXFx1MDAzZWNoaXAtXFx1MDAzZW1heF9tV19wZXJfcG9ydDtcXG4rXFxuK1xcdG91dC1cXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcXHUwMDI2Y29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBjb25maWcucHJpb3JpdHk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcbitcXHRpZiAocHJpbyBcXHUwMDNlIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWSlcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCBvcGMtXFx1MDAzZW9wLCBwcmlvKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcnRwc2VfbWN1X29wcyA9IHtcXG4rXFx0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcXG4rXFx0LnBpX2dldF9wd19zdGF0dXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzLFxcbitcXHQucGlfZ2V0X3B3X2NsYXNzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzLFxcbitcXHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXFxuK1xcdC5waV9lbmFibGUgPSBydHBzZV9tY3VfcG9ydF9lbmFibGUsXFxuK1xcdC5waV9kaXNhYmxlID0gcnRwc2VfbWN1X3BvcnRfZGlzYWJsZSxcXG4rXFx0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXFxuK1xcdC5waV9nZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQsXFxuK1xcdC5waV9zZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQsXFxuK1xcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcXG4rXFx0LnBpX2dldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8sXFxuK1xcdC5waV9zZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfZGlzY292ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgZXh0X2NvbmZpZztcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEEgYm9vdGluZyBNQ1UgbWF5IHN0YXkgc2lsZW50ICgtRVRJTUVET1VUKSwgbm90IEFDSyBpdHMgYWRkcmVzc1xcbitcXHQgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGFcXG4rXFx0ICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhXFxuK1xcdCAqIGJvdW5kZWQgd2luZG93OyBvdGhlciBlcnJvcnMgKGUuZy4gLUVPUE5PVFNVUFApIGFyZSBmYXRhbCBhbmQgZmFpbFxcbitcXHQgKiBpbW1lZGlhdGVseS5cXG4rXFx0ICovXFxuK1xcdGRlYWRsaW5lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUyk7XFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVUSU1FRE9VVCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOWElPIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRVJFTU9URUlPIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICByZXQgIT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVCQURNU0cgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQkFERSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdG1zbGVlcChSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NUyk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gcmVhZCBNQ1UgaW5mb1xcXFxuXFxcIik7XFxuK1xcbitcXHRzd2l0Y2ggKGluZm8tXFx1MDAzZWRldmljZV9pZCkge1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEI6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZydGw4MjM4Yl9pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzk6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZydGw4MjM5X2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZydGw4MjM5Y19pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExOlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2YmNtNTkxMTFfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMTpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNmJjbTU5MTIxX2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgLUVJTlZBTCwgXFxcInVua25vd24gUFNFIGlkIDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW5mby1cXHUwMDNlZGV2aWNlX2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VtYXhfcG9ydHMgfHwgaW5mby1cXHUwMDNlbWF4X3BvcnRzIFxcdTAwM2UgUlRQU0VfTUNVX01BWF9QT1JUUylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIk1DVSByZXBvcnRzIGludmFsaWQgcG9ydCBjb3VudCAldVxcXFxuXFxcIiwgaW5mby1cXHUwMDNlbWF4X3BvcnRzKTtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsIFxcdTAwMjZleHRfY29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIHJldCwgXFxcImZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGRldl9pbmZvKHBzZS1cXHUwMDNlZGV2LCBcXFwiJXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXFxcXG5cXFwiLFxcbitcXHRcXHQgcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VtY3VfdHlwZV9zdHIoaW5mby1cXHUwMDNlbWN1X3R5cGUpLCBwc2UtXFx1MDAzZWNoaXAtXFx1MDAzZW5hbWUsXFxuK1xcdFxcdCBpbmZvLVxcdTAwM2VkZXZpY2VfaWQsIGluZm8tXFx1MDAzZW1heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSlcXG4re1xcbitcXHRyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSBkYXRhO1xcbitcXG4rXFx0cnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7XFxuK31cXG4rXFxuK2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcXG4rXFx0c3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcnRwc2VfbWN1X21zZykgIT0gUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtXFx1MDAzZWRldiwgXFx1MDAyNnBzZS1cXHUwMDNlbXV0ZXgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEocHNlLVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoIW1hdGNoKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgLUVOT0RFViwgXFxcIm1pc3NpbmcgbWF0Y2ggZGF0YVxcXFxuXFxcIik7XFxuK1xcdHBzZS1cXHUwMDNlZGlhbGVjdCA9IG1hdGNoLVxcdTAwM2VkaWFsZWN0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0XFxuK1xcdCAqIHByb2JlIHRpbWUsIHJhdGhlciB0aGFuIE5VTEwtZGVyZWYnaW5nIGxhdGVyIGZyb20gYSBmYXN0IHBhdGguXFxuK1xcdCAqL1xcbitcXHRpZiAoIXBzZS1cXHUwMDNlZGlhbGVjdCB8fFxcbitcXHQgICAgIXBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8gfHxcXG4rXFx0ICAgICFwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3BvcnRfY2xhc3MgfHxcXG4rXFx0ICAgICFwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW1jdV90eXBlX3N0cilcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImRpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxcXFxuXFxcIik7XFxuK1xcbitcXHRwc2UtXFx1MDAzZXBvZV9zdXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQocHNlLVxcdTAwM2VkZXYsIFxcXCJwb3dlclxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHBzZS1cXHUwMDNlcG9lX3N1cHBseSkpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCBQVFJfRVJSKHBzZS1cXHUwMDNlcG9lX3N1cHBseSksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgUG9FIHN1cHBseVxcXFxuXFxcIik7XFxuK1xcbitcXHRlbmFibGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHBzZS1cXHUwMDNlZGV2LCBcXFwiZW5hYmxlXFxcIiwgR1BJT0RfT1VUX0hJR0gpO1xcbitcXHRpZiAoSVNfRVJSKGVuYWJsZV9ncGlvKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIFBUUl9FUlIoZW5hYmxlX2dwaW8pLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGVuYWJsZSBncGlvXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsIFxcdTAwMjZpbmZvKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHNlLVxcdTAwM2Vwb2Vfc3VwcGx5KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIHJldCwgXFxcImZhaWxlZCB0byBlbmFibGUgUG9FIHN1cHBseVxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVxcdTAwM2VkZXYsIHJ0cHNlX21jdV9yZWd1bGF0b3JfZGlzYWJsZSwgcHNlLVxcdTAwM2Vwb2Vfc3VwcGx5KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghaW5mby5zeXN0ZW1fZW5hYmxlKSB7XFxuK1xcdFxcdHJldCA9IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgdHJ1ZSk7XFxuK1xcdFxcdC8qIERpYWxlY3RzIHdpdGhvdXQgYSBnbG9iYWwtc3RhdGUgY29uY2VwdCAoZS5nLiBCQ00pIHJldHVyblxcbitcXHRcXHQgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyBcXFwibm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkXFxcIi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoIXJldCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50XFxuK1xcdCAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbid0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yXFxuK1xcdCAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyXFxuK1xcdCAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuXFxuK1xcdCAqL1xcbitcXG4rXFx0LyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXJcXG4rXFx0ICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuXFxuK1xcdCAqL1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2Lm9wcyAgICAgID0gXFx1MDAyNnJ0cHNlX21jdV9vcHM7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYuZGV2ICAgICAgPSBwc2UtXFx1MDAzZWRldjtcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMztcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzO1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTtcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcXG4rXFxuK1xcdHJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS1cXHUwMDNlZGV2LCBcXHUwMDI2cHNlLVxcdTAwM2VwY2Rldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X3JlZ2lzdGVyKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0aW5mby1cXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcXG4rXFx0aW5mby1cXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdC8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi9cXG4rXFx0cmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtXFx1MDAzZXN0czIpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjJfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcXG4re1xcbitcXHRzd2l0Y2ggKG1jdV90eXBlKSB7XFxuK1xcdGNhc2UgMHgwMDpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYzMTBcXFwiO1xcbitcXHRjYXNlIDB4MDE6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJGMjMwXFxcIjtcXG4rXFx0Y2FzZSAweDAyOlxcdHJldHVybiBcXFwiR2lnYURldmljZSBHRDMyRjMwM1xcXCI7XFxuK1xcdGNhc2UgMHgwMzpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYxMDNcXFwiO1xcbitcXHRjYXNlIDB4MDQ6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJFMTAzXFxcIjtcXG4rXFx0Y2FzZSAweDEwOlxcdHJldHVybiBcXFwiTnV2b3RvbiBNMDUxNlxcXCI7XFxuK1xcdGNhc2UgMHgxMTpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1NjRcXFwiO1xcbitcXHRjYXNlIDB4MTI6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE5VQzAyOVxcXCI7XFxuK1xcdGRlZmF1bHQ6XFx0cmV0dXJuIFxcXCJ1bmtub3duXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxcbit7XFxuK1xcdGluZm8tXFx1MDAzZW1heF9wb3J0cyA9IHBheWxvYWRbMV07XFxuK1xcdC8qIEJDTSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlXFxuK1xcdCAqIFxcXCJyZW1vdGUgZW5hYmxlXFxcIiBiaXQgaW4gdGhlIHN5c3RlbS1zdGF0dXMgZmxhZ3MgYXQgcGF5bG9hZFs3XS5cXG4rXFx0ICovXFxuK1xcdGluZm8tXFx1MDAzZXN5c3RlbV9lbmFibGUgPSAhIShwYXlsb2FkWzddIFxcdTAwMjYgQklUKDIpKTtcXG4rXFx0aW5mby1cXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZwYXlsb2FkWzNdKTtcXG4rXFx0aW5mby1cXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcXG4rXFx0aW5mby1cXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xcbitcXHRpbmZvLVxcdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcXG4rXFx0aW5mby1cXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjFfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXFxuK3tcXG4rXFx0LyogQkNNIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LlxcbitcXHQgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlXFxuK1xcdCAqIG5vaXNlLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHN0YXR1cy1cXHUwMDNlc3RzMyBcXHUwMDI2IDB4MGY7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKVxcbit7XFxuK1xcdHN3aXRjaCAobWN1X3R5cGUpIHtcXG4rXFx0Y2FzZSAweDAwOlxcdHJldHVybiBcXFwiU1QgTWljcm8gU1QzMkYxMDBcXFwiO1xcbitcXHRjYXNlIDB4MDE6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE0wNXh4IExBTlxcXCI7XFxuK1xcdGNhc2UgMHgwMjpcXHRyZXR1cm4gXFxcIlNUIE1pY3JvIFNURjAzMEM4XFxcIjtcXG4rXFx0Y2FzZSAweDAzOlxcdHJldHVybiBcXFwiTnV2b3RvbiBNMDU4U0FOXFxcIjtcXG4rXFx0Y2FzZSAweDA0OlxcdHJldHVybiBcXFwiTnV2b3RvbiBOVUMxMjJcXFwiO1xcbitcXHRkZWZhdWx0OlxcdHJldHVybiBcXFwidW5rbm93blxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyogTWFwIGVhY2ggbG9naWNhbCBjb21tYW5kIHRoZSBjb3JlIGlzc3VlcyB0byBpdHMgcGVyLWRpYWxlY3Qgb3Bjb2RlLiAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjIgPSB7XFxuK1xcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvLFxcbitcXHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLFxcbitcXHQubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMl9tY3VfdHlwZV9zdHIsXFxuK1xcdC5vcGNvZGUgPSB7XFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdXFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXFxuK1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDAxKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVxcdD0gUlRQU0VfTUNVX09QKDB4MTMpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cXHQ9IFJUUFNFX01DVV9PUCgweDE1KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDIpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cXHQ9IFJUUFNFX01DVV9PUCgweDQ0KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDgpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVxcdD0gUlRQU0VfTUNVX09QKDB4NDkpLFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0ge1xcbitcXHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyxcXG4rXFx0LnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2dlbjFfcGFyc2VfcG9ydF9jbGFzcyxcXG4rXFx0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLFxcbitcXHQub3Bjb2RlID0ge1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgyMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxcbitcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cXHQ9IFJUUFNFX01DVV9PUCgweDE2KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldXFx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDIxKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXFx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDI1KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR11cXHQ9IFJUUFNFX01DVV9PUCgweDI2KSxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhID0ge1xcbitcXHQuZGlhbGVjdCA9IFxcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4xLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMV9kYXRhKTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9kYXRhID0ge1xcbitcXHQuZGlhbGVjdCA9IFxcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMl9kYXRhKTtcXG4rXFxuKy8qIFNhbWUgZGlhbGVjdCBhcyBnZW4yLCBidXQgdGhlIE1DVSBleHBlY3RzIHJhdy1JMkMgZnJhbWluZy4gKi9cXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhID0ge1xcbitcXHQuZGlhbGVjdCA9IFxcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxcbitcXHQubmF0aXZlX2kyYyA9IHRydWUsXFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoY29yZSlcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiSm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NzE3Njg0YzBjYmQ5MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jXFxuQEAgLTAsMCArMSwxNzEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJyZWFsdGVrLXBzZS1tY3UuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvXFxuKyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXFxuKyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcXG4rICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1xcdFJUUFNFX01DVV9SRVNQT05TRV9NU1xcbisjZGVmaW5lIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTXFx0KFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMgLyBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVxcdTAwM2VkZXYpO1xcbitcXG4rXFx0LyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqL1xcbitcXHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVxcdTAwM2VvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICh1OCAqKXJlcSArIDEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHRyaWVzLCByZXQ7XFxuK1xcbitcXHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xcbitcXHRcXHRpZiAodHJpZXMgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XFxuK1xcbitcXHRcXHQvKiBNQ1UgbmVlZHMgMHgwMCBhcyBjb21tYW5kIGJ5dGUgZm9yIHJlYWQgKi9cXG4rXFx0XFx0cmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgUlRQU0VfTUNVX01TR19TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHU4ICopcmVzcCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSBcXHUwMDI2XFx1MDAyNiBydHBzZV9tY3VfcmVzcF9pc19maW5hbChyZXEsIHJlc3ApKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19zbWJ1c19vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kLFxcbitcXHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdixcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXFx1MDAzZWRldik7XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIGkyY19tYXN0ZXJfc2VuZCgpIG1heSBETUEsIHNvIHRoZSBidWZmZXIgbXVzdCBub3QgYmUgb24gdGhlIHN0YWNrLiAqL1xcbitcXHRidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFidWYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpO1xcbitcXHRrZnJlZShidWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgPyAwIDogLUVJTztcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHRyaWVzLCByZXQ7XFxuK1xcdHU4ICpidWY7XFxuK1xcbitcXHQvKiBpMmNfbWFzdGVyX3JlY3YoKSBtYXkgRE1BLCBzbyByZWFkIGludG8gYW4gb2ZmLXN0YWNrIGJ1ZmZlci4gKi9cXG4rXFx0YnVmID0ga21hbGxvYyhSVFBTRV9NQ1VfTVNHX1NJWkUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJ1ZilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xcbitcXHRcXHRpZiAodHJpZXMgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XFxuK1xcbitcXHRcXHRyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUpIHtcXG4rXFx0XFx0XFx0bWVtY3B5KHJlc3AsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFx0XFx0XFx0aWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldCA9IC1FVElNRURPVVQ7XFxuK291dDpcXG4rXFx0a2ZyZWUoYnVmKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcXG4rXFx0LnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcXG4rXFx0Ym9vbCB1c2VfbmF0aXZlO1xcbitcXG4rXFx0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4rXFx0aWYgKCFtYXRjaClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCBcXFwibWlzc2luZyBtYXRjaCBkYXRhXFxcXG5cXFwiKTtcXG4rXFxuK1xcdC8qIFRoZSBmcmFtaW5nIChyYXcgSTJDIHZzIFNNQnVzKSBpcyBjYXJyaWVkIGJ5IHRoZSBtYXRjaCBkYXRhLiAqL1xcbitcXHR1c2VfbmF0aXZlID0gbWF0Y2gtXFx1MDAzZW5hdGl2ZV9pMmM7XFxuK1xcbitcXHRpZiAodXNlX25hdGl2ZSkge1xcbitcXHRcXHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cXHUwMDNlYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcXG4rXFx0XFx0XFx0XFx0XFxcInBsYWluLUkyQyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgSTJDLWNhcGFibGUgYWRhcHRlclxcXFxuXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVxcdTAwM2VhZGFwdGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0spKVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxcbitcXHRcXHRcXHRcXHRcXFwiU01CdXMgTUNVIHByb3RvY29sIHJlcXVpcmVzIFNNQnVzIEkyQy1ibG9jayBzdXBwb3J0XFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cHNlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwc2UpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwc2UpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cHNlLVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYub3duZXIgPSBUSElTX01PRFVMRTtcXG4rXFx0cHNlLVxcdTAwM2V0cmFuc3BvcnQgPSB1c2VfbmF0aXZlID8gXFx1MDAyNnJ0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA6IFxcdTAwMjZydHBzZV9tY3VfaTJjX3NtYnVzX29wcztcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X2dlbjFfZGF0YSB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1xcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4yX2kyY19kYXRhIH0sXFxuK1xcdHsgLyogc2VudGluZWwgKi8gfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfaTJjX29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBydHBzZV9tY3VfaTJjX2RyaXZlciA9IHtcXG4rXFx0LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJyZWFsdGVrLXBzZS1tY3UtaTJjXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlXFx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmVcXHRcXHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXFxuK307XFxuK21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkpvbmFzIEplbG9uZWsgXFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkxY2FkYjU1NjlhYjQ0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jXFxuQEAgLTAsMCArMSwxNTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXJkZXYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJyZWFsdGVrLXBzZS1tY3UuaFxcXCJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUXFx0MTkyMDBcXG4rI2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUXFx0bXNlY3NfdG9famlmZmllcygxMDApXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVFxcdG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUylcXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfdWFydCB7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCBwc2U7XFxuK1xcdHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXY7XFxuK1xcdHN0cnVjdCBjb21wbGV0aW9uIHJ4X2RvbmU7XFxuK1xcdHNwaW5sb2NrX3QgcnhfbG9jaztcXHRcXHQvKiBwcm90ZWN0cyByeF9idWYgYW5kIHJ4X2xlbiAqL1xcbitcXHRzaXplX3QgcnhfbGVuO1xcbitcXHR1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSlcXG4rXFxuKy8qXFxuKyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlblxcbisgKiB0aGUgbmV4dCBfc2VuZCByZS1mcmFtZXMgZnJvbSByeF9sZW4gMC4gUmVzeW5jIHdvcmtzIGJ5IHJldHVybmluZyBjb3VudFxcbisgKiAobm90IHRha2UpLCBkcm9wcGluZyBhbnkgb3ZlcmZsb3cgc28gc2VyZGV2IGtlZXBzIG5vIGxlZnRvdmVyIHRvIGJsZWVkXFxuKyAqIGludG8gdGhlIG5leHQgZnJhbWUuXFxuKyAqL1xcbitzdGF0aWMgc2l6ZV90IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7XFxuK1xcdHNpemVfdCB0YWtlO1xcbitcXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2xvY2spIHtcXG4rXFx0XFx0dGFrZSA9IG1pbihjb3VudCwgc2l6ZW9mKGN0eC1cXHUwMDNlcnhfYnVmKSAtIGN0eC1cXHUwMDNlcnhfbGVuKTtcXG4rXFx0XFx0aWYgKHRha2UpIHtcXG4rXFx0XFx0XFx0bWVtY3B5KGN0eC1cXHUwMDNlcnhfYnVmICsgY3R4LVxcdTAwM2VyeF9sZW4sIGJ1ZiwgdGFrZSk7XFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlcnhfbGVuICs9IHRha2U7XFxuK1xcdFxcdFxcdGlmIChjdHgtXFx1MDAzZXJ4X2xlbiA9PSBzaXplb2YoY3R4LVxcdTAwM2VyeF9idWYpKVxcbitcXHRcXHRcXHRcXHRjb21wbGV0ZShcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBjb25zdW1lIGFsbCB0byBhdm9pZCBkZXN5bmMvbWlzYWxpZ25tZW50ICovXFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0ge1xcbitcXHQucmVjZWl2ZV9idWYgPSBydHBzZV9tY3VfdWFydF9yZWNlaXZlLFxcbitcXHQud3JpdGVfd2FrZXVwID0gc2VyZGV2X2RldmljZV93cml0ZV93YWtldXAsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xcbitcXHRpbnQgd3JpdHRlbjtcXG4rXFxuK1xcdC8qIGNsZWFyIGFueSBsZWZ0b3ZlciByeCBzdGF0ZSBiZWZvcmUgdHJhbnNtaXR0aW5nICovXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKSB7XFxuK1xcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2RvbmUpO1xcbitcXHRcXHRjdHgtXFx1MDAzZXJ4X2xlbiA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXR0ZW4gPSBzZXJkZXZfZGV2aWNlX3dyaXRlKGN0eC1cXHUwMDNlc2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7XFxuK1xcdGlmICh3cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHdyaXR0ZW47XFxuK1xcdGlmICh3cml0dGVuICE9IHNpemVvZigqcmVxKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcXG4rXFxuK1xcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2RvbmUsIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVQpKVxcbitcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKSB7XFxuK1xcdFxcdGlmIChjdHgtXFx1MDAzZXJ4X2xlbiAhPSBzaXplb2YoKnJlc3ApKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdFxcdG1lbWNweShyZXNwLCBjdHgtXFx1MDAzZXJ4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcyA9IHtcXG4rXFx0LnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLFxcbitcXHQucmVjdiA9IHJ0cHNlX21jdV91YXJ0X3JlY3YsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXFxuK3tcXG4rXFx0dTMyIHNwZWVkID0gUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2c2VyZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Y3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjdHgpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VzZXJkZXYgPSBzZXJkZXY7XFxuK1xcdGN0eC1cXHUwMDNlcHNlLmRldiA9IGRldjtcXG4rXFx0Y3R4LVxcdTAwM2Vwc2UucGNkZXYub3duZXIgPSBUSElTX01PRFVMRTtcXG4rXFx0Y3R4LVxcdTAwM2Vwc2UudHJhbnNwb3J0ID0gXFx1MDAyNnJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHM7XFxuK1xcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jayk7XFxuK1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9kcnZkYXRhKHNlcmRldiwgY3R4KTtcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsIFxcdTAwMjZydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fc2VyZGV2X2RldmljZV9vcGVuKGRldiwgc2VyZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gb3BlbiBzZXJkZXZcXFxcblxcXCIpO1xcbitcXG4rXFx0Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgXFxcImN1cnJlbnQtc3BlZWRcXFwiLCBcXHUwMDI2c3BlZWQpO1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIHNwZWVkKTtcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpO1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpO1xcbitcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcihcXHUwMDI2Y3R4LVxcdTAwM2Vwc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4xXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X2dlbjFfZGF0YSB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4yXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxcbitcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7XFxuK1xcdC5kcml2ZXIgPSB7XFxuK1xcdFxcdC5uYW1lID0gXFxcInJlYWx0ZWstcHNlLW1jdS11YXJ0XFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXFxuK1xcdH0sXFxuK1xcdC5wcm9iZSAgPSBydHBzZV9tY3VfdWFydF9wcm9iZSxcXG4rfTtcXG4rbW9kdWxlX3NlcmRldl9kZXZpY2VfZHJpdmVyKHJ0cHNlX21jdV91YXJ0X2RyaXZlcik7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKb25hcyBKZWxvbmVrIFxcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmggYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOWE2ZGEyYzhmMzdkOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmhcXG5AQCAtMCwwICsxLDkwIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuK1xcbisjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxcbisjZGVmaW5lIF9SRUFMVEVLX1BTRV9NQ1VfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rLypcXG4rICogVGltZSB0aGUgTUNVIGl0c2VsZiBuZWVkcyBiZXR3ZWVuIGFjY2VwdGluZyBhIHJlcXVlc3QgYW5kIGhhdmluZyBhXFxuKyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXFxuKyAqIHVuZGVybHlpbmcgdHJhbnNwb3J0OiB0aGUgY29yZSBwYWNlcyB0cmFuc2FjdGlvbnMgYnkgUlRQU0VfTUNVX1JFU1BPTlNFX01TXFxuKyAqIGFuZCBib3RoIHRyYW5zcG9ydHMgc2l6ZSB0aGVpciBwZXItdHJhbnNhY3Rpb24gcmVjdiBjZWlsaW5nIGZyb21cXG4rICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xcbisgKiBuZWVkaW5nIHVwIHRvIH4xcyB0byBwcm9kdWNlIGEgcmVwbHkuXFxuKyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1xcdFxcdFxcdDI1XFxuKyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NU1xcdFxcdDEwMDBcXG4rXFxuKy8qXFxuKyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2VcXG4rICogYmV0d2VlbiBhdHRlbXB0cy4gUmlnaHQgYWZ0ZXIgZW5hYmxlLWdwaW9zIGlzIGFzc2VydGVkIHRoZSBNQ1UgbWF5IG5vdFxcbisgKiBhbnN3ZXIgb24gdGhlIGJ1cyB5ZXQ7IGdpdmUgaXQgYSBib3VuZGVkIHdpbmRvdyB0byBjb21lIHVwIGJlZm9yZVxcbisgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NU1xcdFxcdDMwMDBcXG4rI2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NU1xcdFxcdFxcdDEwMFxcbitcXG4rI2RlZmluZSBSVFBTRV9NQ1VfTVNHX1NJWkVcXHRcXHRcXHQxMlxcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9tc2cge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHNlcV9udW07XFxuK1xcdHU4IHBheWxvYWRbOV07XFxuK1xcdHU4IGNoZWNrc3VtO1xcbit9IF9fcGFja2VkO1xcbitcXG4rLypcXG4rICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBCQ00gZGlhbGVjdDsgUlRMIG5ldmVyIGVtaXRzIHRoZW0pLlxcbisgKiBJTkNPTVBMRVRFL0JBRF9DU1VNIGFyZSB0ZXJtaW5hbDsgTk9UX1JFQURZIGlzIHRyYW5zaWVudC5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXFx0XFx0MHhmZFxcdC8qIC1FQkFERSAgICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTVxcdFxcdDB4ZmVcXHQvKiAtRUJBRE1TRyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZXFx0XFx0MHhmZlxcdC8qIC1FQUdBSU4gICovXFxuK1xcbisvKiBBIHBvbGxpbmcgdHJhbnNwb3J0IGNhbiBzdG9wIGhlcmU6IHRoZSBtYXRjaGluZyByZXBseSwgb3IgYSB0ZXJtaW5hbCBlcnJvci4gKi9cXG4rc3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHJldHVybiByZXNwLVxcdTAwM2VvcGNvZGUgPT0gcmVxLVxcdTAwM2VvcGNvZGUgfHxcXG4rXFx0ICAgICAgIHJlc3AtXFx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHxcXG4rXFx0ICAgICAgIHJlc3AtXFx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNO1xcbit9XFxuK1xcbisvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovXFxuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdDtcXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm87XFxuK3N0cnVjdCBydHBzZV9tY3VfY3RybDtcXG4rXFxuKy8qIFBlci1jb21wYXRpYmxlIG1hdGNoIGRhdGEgKHRoZSBvZl9tYXRjaCAuZGF0YSkuICovXFxuK3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcXG4rXFx0Ym9vbCBuYXRpdmVfaTJjO1xcdC8qIHJhdy1JMkMgZnJhbWluZyAodnMgU01CdXMpOyBJMkMgdHJhbnNwb3J0IG9ubHkgKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyB7XFxuK1xcdGludCAoKnNlbmQpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKTtcXG4rXFx0aW50ICgqcmVjdikoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XFxuK1xcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi9cXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7XFxuK1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICpwb2Vfc3VwcGx5O1xcbit9O1xcbitcXG4raW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7XFxuK1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGE7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YTtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YTtcXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjo0MjoyNi4wMDI4OTQzNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjMxNDY5NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9JMkNcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9VQVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9lbmFibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2Rpc2FibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV9kb194ZmVyXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmRcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfc21idXNfcmVjdlwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZFwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdlwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcmVjZWl2ZVwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfc2VuZFwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcmVjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdmlhIEkyQyBvciBVQVJULiBJdCBpbXBsZW1lbnRzIHRoZSBldGh0b29sIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBQU0Ugb3BlcmF0aW9ucyBhbmQgdGhlIHRyYW5zcG9ydCBsYXllciBpbXBsZW1lbnRhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGY0OGY0YmZjZGZhMzBlNTI3ZGVmNDRkYWEyZmZhOWQ3YWM5ZGYxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE2OjQyOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MzMzMDYxOTNkYjU3ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWxcbkBAIC0wLDAgKzEsMTc2IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBSZWFsdGVrIFBTRSBNQ1VcbitcbittYWludGFpbmVyczpcbisgIC0gSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBBIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IG1hbmFnZXMgdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KVxuKyAgaGFyZHdhcmUgb24gYSByYW5nZSBvZiBtYW5hZ2VkIFBvRSBzd2l0Y2hlcy4gVGhlIGhvc3QgQ1BVIHRhbGtzIG9ubHkgdG9cbisgIHRoaXMgTUNVIC0gb3ZlciBJMkMvU01CdXMgb3IgVUFSVCAtIHVzaW5nIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDtcbisgIHRoZSBQU0Ugc2lsaWNvbiBpdCBkcml2ZXMgc2l0cyBiZWhpbmQgdGhlIE1DVSBhbmQgaXMgbmV2ZXIgYWNjZXNzZWRcbisgIGRpcmVjdGx5LiBGb3IgZXhhbXBsZSwgb24gdGhlIFp5eGVsIEdTMTkwMC0xMEhQIHRoZSBTb0MgcmVhY2hlcyB0aGUgTUNVXG4rICBvdmVyIFVBUlQsIGFuZCB0aGUgTUNVIG1hbmFnZXMgdGhlIG9uLWJvYXJkIFBTRSBjaGlwLlxuK1xuKyAgVGhpcyBiaW5kaW5nIGRlc2NyaWJlcyB0aGUgTUNVIHRvZ2V0aGVyIHdpdGggaXRzIFJlYWx0ZWsgZmlybXdhcmU6IHRoZVxuKyAgZmlybXdhcmUgYW5kIGl0cyBob3N0IHByb3RvY29sLCB3aGljaCBhcmUgc3RhYmxlIGFjcm9zcyBib2FyZHMuIFRoZVxuKyAgbWljcm9jb250cm9sbGVyIHNpbGljb24gaXMgYSBnZW5lcmFsLXB1cnBvc2UgcGFydCB0aGF0IHZhcmllcywgYW5kIHRoZVxuKyAgUFNFIHNpbGljb24gYmVoaW5kIHRoZSBNQ1UgKFJlYWx0ZWsgUlRMODIzeC9SVEw4MjM5KiBvciBCcm9hZGNvbVxuKyAgQkNNNTl4eHgpIGlzIHJlcG9ydGVkIGJ5IHRoZSBNQ1UgYW5kIGRldGVjdGVkIGF0IHJ1bnRpbWUgLSBuZWl0aGVyIGlzXG4rICBuYW1lZCBoZXJlLlxuK1xuKyAgVHdvIHByb3RvY29sIGdlbmVyYXRpb25zIGV4aXN0LCBib3RoIFJlYWx0ZWsnczpcbisgICAgZ2VuMSAgb2xkZXIgYm9hcmRzLCB3aGVyZSB0aGUgTUNVIGZyb250cyBCcm9hZGNvbSBQU0Ugc2lsaWNvblxuKyAgICBnZW4yICB0aGUgYWx0ZXJlZCBwcm90b2NvbCB1c2VkIHdpdGggUmVhbHRlaydzIG93biBQU0Ugc2lsaWNvblxuK1xuKyAgT24gYW4gSTJDIGF0dGFjaG1lbnQgdGhlIGZyYW1pbmcgdGhlIE1DVSBmaXJtd2FyZSBleHBlY3RzIGlzIHBhcnQgb2YgdGhlXG4rICBjb21wYXRpYmxlOiAnLXNtYnVzJyAocmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSBhbmQgYSByZXBlYXRlZFxuKyAgc3RhcnQpIG9yICctaTJjJyAoYmFyZSBibG9jayB3cml0ZXMgYW5kIHJlYWRzKS4gQSBVQVJUIGF0dGFjaG1lbnQgY2Fycmllc1xuKyAgbm8gZnJhbWluZyBzdWZmaXg7IHRoZSB0cmFuc3BvcnQgaXMgZ2l2ZW4gYnkgdGhlIHBhcmVudCAnc2VyaWFsJyBub2RlLlxuK1xuKyAgRWFjaCBib2FyZCBhZGRpdGlvbmFsbHkgY2FycmllcyBhIGRldmljZS1zcGVjaWZpYyBjb21wYXRpYmxlIHRoYXQgZmFsbHNcbisgIGJhY2sgdG8gb25lIG9mIHRoZSBwcm90b2NvbCBjb21wYXRpYmxlcyBhYm92ZS4gRHJpdmVycyBiaW5kIG9uIHRoZVxuKyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kXG4rICByZXNlcnZlcyBhIHBsYWNlIGZvciBhIGZ1dHVyZSBwZXItYm9hcmQgcXVpcmsgd2l0aG91dCBoYXZpbmcgdG8gcmV0cm9maXRcbisgIGRldmljZSB0cmVlcyBhbHJlYWR5IGluIHRoZSBmaWVsZC5cbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgb25lT2Y6XG4rICAgICAgIyBVQVJUXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjFcbitcbisgICAgICAjIEkyQywgU01CdXMgZnJhbWluZ1xuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTIwLTI0aHAtdjItcHNlXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4rXG4rICAgICAgIyBVQVJUXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1iMS1wc2VcbisgICAgICAgICAgICAgIC0genl4ZWwseG1nMTkxNS0xMGVwLXBzZVxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMlxuK1xuKyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSB6eXhlbCx4czE5MzAtMTJocC1wc2VcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcbitcbisgICAgICAjIEkyQywgcmF3IGZyYW1pbmdcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIGxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZVxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcbitcbisgIHJlZzpcbisgICAgbWF4SXRlbXM6IDFcbitcbisgIHBvd2VyLXN1cHBseTpcbisgICAgZGVzY3JpcHRpb246IFJlZ3VsYXRvciBzdXBwbHlpbmcgdGhlIFBvRSBwb3dlciByYWlsLlxuK1xuKyAgZW5hYmxlLWdwaW9zOlxuKyAgICBtYXhJdGVtczogMVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rXG4rYWxsT2Y6XG4rICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjXG4rICAtICRyZWY6IC9zY2hlbWFzL3NlcmlhbC9zZXJpYWwtcGVyaXBoZXJhbC1wcm9wcy55YW1sI1xuKyAgIyBBICctc21idXMnLyctaTJjJyBjb21wYXRpYmxlIGlzIGFuIEkyQyBhdHRhY2htZW50OiBpdCBoYXMgJ3JlZycgYW5kXG4rICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlRcbisgICMgYXR0YWNobWVudDogbm8gJ3JlZycsIHRoZSB0cmFuc3BvcnQgY29tZXMgZnJvbSB0aGUgcGFyZW50IHNlcmlhbCBub2RlLlxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29udGFpbnM6XG4rICAgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjEtc21idXNcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4rICAgIHRoZW46XG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIHJlZ1xuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjdXJyZW50LXNwZWVkOiBmYWxzZVxuKyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxuKyAgICBlbHNlOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICByZWc6IGZhbHNlXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgIyBTTUJ1cy1mcmFtZWQgSTJDIGF0dGFjaG1lbnRcbisgIC0gfFxuKyAgICBpMmMge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ6eXhlbCx4czE5MzAtMTJocC1wc2VcIiwgXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1wiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MjBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgcHNlLXBpcyB7XG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG4rXG4rICAjIFJhdy1JMkMtZnJhbWVkIGF0dGFjaG1lbnRcbisgIC0gfFxuKyAgICBpMmMge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcIiwgXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MweDIwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgIHBzZS1waXMge1xuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICB9O1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuK1xuKyAgIyBVQVJUIGF0dGFjaG1lbnRcbisgIC0gfFxuKyAgICBzZXJpYWwge1xuKyAgICAgICAgZXRoZXJuZXQtcHNlIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcIiwgXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMVwiO1xuKyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSBcdTAwM2MxOTIwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBwc2UtcGlzIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uM2IyMWU0NmJlNjhhMWYgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMjcxNiw2ICsyMjcxNiwxMyBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHRpbmNsdWRlL3NvdW5kL3J0Ki5oXG4gRjpcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXG4gXG4rUkVBTFRFSyBQU0UgTUNVIERSSVZFUlxuK006XHRKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuK1xuIFJFQUxURUsgT1RUTyBXQVRDSERPR1xuIE06XHRTYW5kZXIgVmFuaGV1bGUgXHUwMDNjc2FuZGVyQHN2YW5oZXVsZS5uZXRcdTAwM2VcbiBMOlx0bGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuaW5kZXggN2VmMjk2NTdlZTVkZDEuLmEwZjJhZTY2OGM2N2M4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuIFxuIGlmIFBTRV9DT05UUk9MTEVSXG4gXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVVxuK1x0dHJpc3RhdGVcbitcdGhlbHBcbitcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzIHNlbGVjdGVkXG4rXHQgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4rXHR0cmlzdGF0ZSBcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCJcbitcdGRlcGVuZHMgb24gSTJDXG4rXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4rXHRoZWxwXG4rXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4rXHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxuK1x0ICB2aWEgSTJDL1NNQnVzLiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsXG4rXHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXG4rXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfVUFSVFxuK1x0dHJpc3RhdGUgXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcIlxuK1x0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xuK1x0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuK1x0aGVscFxuK1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuK1x0ICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWRcbitcdCAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFXG4rXHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbitcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LlxuK1xuIGNvbmZpZyBQU0VfUkVHVUxBVE9SXG4gXHR0cmlzdGF0ZSBcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwiXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG5pbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuQEAgLTMsNiArMyw5IEBAXG4gXG4gb2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXG4gXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVSkgKz0gcmVhbHRlay1wc2UtbWN1LWNvcmUub1xuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSArPSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX1VBUlQpICs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgKz0gcHNlX3JlZ3VsYXRvci5vXG4gb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSArPSBwZDY5MngwLm9cbiBvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBhNWJiNzg0MzYwYTVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xuQEAgLTAsMCArMSw5OTMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXNcbisgKiBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMuIFRoZSBNQ1Ugc3BlYWtzIGEgMTItYnl0ZSBmaXhlZC1mcmFtZVxuKyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlXG4rICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLlxuKyAqXG4rICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGVcbisgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yXG4rICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVXG4rICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbC4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3RcbisgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxuKyAqXG4rICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLlxuKyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmVcbisgKiB0aGUgTUNVIGZyb250cyBhbmQgbWFuYWdlcyBCcm9hZGNvbSBQU0Ugc2lsaWNvbjsgR2VuMiBiZWluZyB1c2VkIHdpdGhcbisgKiBSZWFsdGVrIFBTRSBzaWxpY29uLiBUaGUgdHdvIHNoYXJlIGZyYW1lIGZvcm1hdCBhbmQgYSBzdW0tbW9kLTI1NlxuKyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzO1xuKyAqIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuXG4rICpcbisgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcbisgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sXG4rICogZmFtaWx5LCBhbmQgXCJkdW1iIFBTRVwiIG1vZGVzIHdoZXJlIG5vIGhvc3QgY29udHJvbCBpcyB3aXJlZCB1cCBhdCBhbGwuXG4rICpcbisgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1VcbisgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlc1xuKyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2XG4rICogY2FsbGJhY2tzLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInJlYWx0ZWstcHNlLW1jdS5oXCJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcdFx0MHgwMTM4XG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcdFx0MHgwMDM5XG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDXHRcdDB4MDEzOVxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVx0XHQweGUxMTFcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcdFx0MHhlMTIxXG4rXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRURcdFx0MHgwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1x0XHQweDAxXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklOR1x0XHQweDAyXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVFx0XHRcdDB4MDNcdC8qIEdlbjEtb25seTsgcmVzZXJ2ZWQgb24gR2VuMiAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUXHRcdDB4MDRcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVFx0XHQweDA1XHQvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HXHRcdDB4MDZcbitcbisvKiBSVFBTRV9NQ1VfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSB2YWx1ZXMgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlx0MHgwMlxuK1xuKyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUU1x0XHRcdDQ4XG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFlcdFx0M1xuK1xuK2VudW0gcnRwc2VfbWN1X2NtZCB7XG4rXHRSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsXG4rXHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcbitcdFJUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUcsXG4rXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFLFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFLFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUUyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHLFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxuK1xuK1x0UlRQU0VfTUNVX05VTV9DTURTLFxuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUge1xuK1x0dTggb3A7XG4rXHRib29sIHZhbGlkO1xuK307XG4rXG4rLyogU2hvcnRoYW5kIGZvciB0aGUgZGVzaWduYXRlZC1pbml0aWFsaXplciBlbnRyaWVzIGluIGRpYWxlY3Qgb3Bjb2RlIHRhYmxlcy4gKi9cbisjZGVmaW5lIFJUUFNFX01DVV9PUChvcGMpXHR7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH1cbitcbisvKiBQYXJzZWQgTUNVIHJlc3BvbnNlIHN0cnVjdHVyZXMgKGRlY29kZWQgZnJvbSBydHBzZV9tY3VfbXNnIHJlcGxpZXMpICovXG4rXG4rc3RydWN0IHJ0cHNlX21jdV9pbmZvIHtcbitcdHU4IG1heF9wb3J0cztcbitcdGJvb2wgc3lzdGVtX2VuYWJsZTtcbitcdHUxNiBkZXZpY2VfaWQ7XG4rXHR1OCBzd192ZXI7XG4rXHR1OCBtY3VfdHlwZTtcbitcdHU4IGNvbmZpZ19zdGF0dXM7XG4rXHR1OCBleHRfdmVyO1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcbitcdHU4IHV2bG87XG4rXHR1OCBvdmxvO1xuK1x0Ym9vbCBwcmVhbGxvY19lbmFibGU7XG4rXHR1OCBudW1fb2ZfcHNlcztcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMge1xuK1x0dTggc3RzMTtcbitcdHU4IHN0czI7XG4rXHR1OCBzdHMzO1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IHtcbitcdHUxNiB2b2x0YWdlX3JhdztcdC8qIDY0LjQ1bVYvTFNCICovXG4rXHR1MTYgY3VycmVudF9yYXc7XHQvKiAxbUEvTFNCICovXG4rXHR1MTYgdGVtcGVyYXR1cmVfcmF3O1x0LyogVChtQykgPSAxMjUwICogKDIyMCAtIHJhdykgKi9cbitcdHUxNiBwb3dlcl9yYXc7XHRcdC8qIDEwMG1XL0xTQiAqL1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XG4rXHRib29sIGVuYWJsZTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIHtcbitcdHU4IG1heF9wb3dlcjtcbitcdHU4IHByaW9yaXR5O1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcbitcdHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIG9wY29kZVtSVFBTRV9NQ1VfTlVNX0NNRFNdO1xuK1xuK1x0LypcbitcdCAqIFJlc3BvbnNlIHBhcnNlcnMgZm9yIHRoZSBmaWVsZHMgdGhhdCBkaWZmZXIgYmV0d2VlbiBkaWFsZWN0czsgZWFjaFxuK1x0ICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlXG4rXHQgKiBkZWNvZGVkIGRpcmVjdGx5IC0gYSBkaWFsZWN0IHRoYXQgZGl2ZXJnZXMgdGhlcmUgbXVzdCBhZGQgYSBob29rLFxuK1x0ICogYXMgYSBtaXNtYXRjaGVkIGxheW91dCBjYW5ub3QgYmUgZGV0ZWN0ZWQgKHRoZSBjaGVja3N1bSBzdGlsbCBwYXNzZXMpLlxuK1x0ICovXG4rXHR2b2lkICgqcGFyc2Vfc3lzdGVtX2luZm8pKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pO1xuK1x0aW50ICgqcGFyc2VfcG9ydF9jbGFzcykoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKTtcbitcdGNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpO1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8ge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdHUxNiBkZXZpY2VfaWQ7XG4rXHR1MzIgbWF4X21XX3Blcl9wb3J0O1xuK1x0ZW51bSBydHBzZV9tY3VfY21kIHB3X3NldF9jbWQ7XHQvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovXG4rXHR1MzIgcHdfc2V0X2xzYl9tVztcdFx0LyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovXG4rXHR1MzIgcHdfcmVhZF9sc2JfbVc7XHRcdC8qIExTQiBvZiBleHRfY29uZmlnLm1heF9wb3dlciByZWFkLWJhY2ssIGluIG1XICovXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOGJfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuK1x0Lm5hbWUgPSBcIlJUTDgyMzhCXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XG4rXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5LFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuK1x0Lm5hbWUgPSBcIlJUTDgyMzlcIixcbitcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbitcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDQwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5Y19pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXG4rXHQubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsXG4rXHQubmFtZSA9IFwiUlRMODIzOUNcIixcbitcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbitcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDQwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTExMV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsXG4rXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXG4rXHQubmFtZSA9IFwiQkNNNTkxMTFcIixcbitcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbitcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbitcdC5wd19zZXRfbHNiX21XID0gMjAwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XG4rXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMSxcbitcdC8qXG4rXHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxuK1x0ICogYW5kIHRoZSBCQ00gZGlhbGVjdCBoYXMgb25seSB0aGUgOC1iaXQvMC4yVyBzZXQgY29tbWFuZCAoXHUwMDNjPTUxVyk7XG4rXHQgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLlxuK1x0ICovXG4rXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXG4rXHQubmFtZSA9IFwiQkNNNTkxMjFcIixcbitcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbitcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbitcdC5wd19zZXRfbHNiX21XID0gMjAwLFxuK307XG4rXG4rLyogSGVscGVycyBhbmQgYmFzaWMgZnVuY3Rpb25zICovXG4rXG4rc3RhdGljIHN0cnVjdCBydHBzZV9tY3VfY3RybCAqdG9fcnRwc2VfbWN1X2N0cmwoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4re1xuK1x0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXG4re1xuK1x0bWVtc2V0KG1zZywgMHhmZiwgc2l6ZW9mKCptc2cpKTtcbitcdG1zZy1cdTAwM2VvcGNvZGUgPSBvcGNvZGU7XG4rfVxuK1xuK3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHR1OCBzdW0gPSAwO1xuK1xuK1x0d2hpbGUgKGxlbi0tKVxuK1x0XHRzdW0gKz0gKmJ1ZisrO1xuK1x0cmV0dXJuIHN1bTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZG9feGZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXEtXHUwMDNlY2hlY2tzdW0gPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVxLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKTtcbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KSB7XG4rXHRcdHJldCA9IHBzZS1cdTAwM2V0cmFuc3BvcnQtXHUwMDNlc2VuZChwc2UsIHJlcSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LypcbitcdFx0ICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdFxuK1x0XHQgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0b1xuK1x0XHQgKiB1cy4gUGFjZSB0aGUgdHJhbnNhY3Rpb24gaGVyZSBzbyBlYWNoIHRyYW5zcG9ydCBjYW4ga2VlcCBpdHMgcmVjdlxuK1x0XHQgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS5cbitcdFx0ICovXG4rXHRcdG1zbGVlcChSVFBTRV9NQ1VfUkVTUE9OU0VfTVMpO1xuK1xuK1x0XHRtZW1zZXQocmVzcCwgMCwgc2l6ZW9mKCpyZXNwKSk7XG4rXHRcdHJldCA9IHBzZS1cdTAwM2V0cmFuc3BvcnQtXHUwMDNlcmVjdihwc2UsIHJlcSwgcmVzcCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBFeHBsaWNpdCBNQ1UgZXJyb3Igb3Bjb2RlcyAob2JzZXJ2ZWQgb24gdGhlIEJDTSBkaWFsZWN0OyBoYXJtbGVzc1xuK1x0ICogdG8gY2hlY2sgZm9yIFJUTCB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQ1xuK1x0ICogbWlzbWF0Y2ggcGF0aCBzbyBjYWxsZXJzIHNlZSBhIG1lYW5pbmdmdWwgZXJybm8uXG4rXHQgKi9cbitcdHN3aXRjaCAocmVzcC1cdTAwM2VvcGNvZGUpIHtcbitcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFOlxuK1x0XHRyZXR1cm4gLUVCQURFO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOlxuK1x0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcbitcdGlmIChyZXNwLVx1MDAzZW9wY29kZSAhPSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4rXHQgICAgcmVzcC1cdTAwM2VzZXFfbnVtICE9IHJlcS1cdTAwM2VzZXFfbnVtIHx8XG4rXHQgICAgcmVzcC1cdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXG4rXHRcdHJldHVybiAtRUJBRE1TRztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxuK1x0XHRcdFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xuK1x0aW50IHJldDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4rXHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgcmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJlc3AtXHUwMDNlcGF5bG9hZFswXSAhPSBwb3J0KVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuK1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuK1x0cmVxLnBheWxvYWRbMV0gPSBhcmc7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJlc3AucGF5bG9hZFswXSAhPSBwb3J0IHx8IHJlc3AucGF5bG9hZFsxXSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBHbG9iYWwgb3BlcmF0aW9ucyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9pbmZvKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnICpjb25maWcpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbitcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRjb25maWctXHUwMDNldXZsbyA9IHJlc3AucGF5bG9hZFswXTtcbitcdGNvbmZpZy1cdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xuK1x0Y29uZmlnLVx1MDAzZXByZWFsbG9jX2VuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMHgxKTtcbitcdGNvbmZpZy1cdTAwM2VudW1fb2ZfcHNlcyA9IHJlc3AucGF5bG9hZFs2XTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XG4rfVxuK1xuKy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdGF0dXMtXHUwMDNlc3RzMSA9IHJlc3AucGF5bG9hZFsxXTtcbitcdHN0YXR1cy1cdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xuK1x0c3RhdHVzLVx1MDAzZXN0czMgPSByZXNwLnBheWxvYWRbM107XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRtZWFzdXJlbWVudC1cdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNlY3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzNdKTtcbitcdG1lYXN1cmVtZW50LVx1MDAzZXRlbXBlcmF0dXJlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbNV0pO1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGNvbmZpZy1cdTAwM2VlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Y29uZmlnLVx1MDAzZW1heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTtcbitcdGNvbmZpZy1cdTAwM2Vwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV07XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcbit9XG4rXG4rLyogUFNFIGNvbnRyb2xsZXIgb3BzICovXG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRhZG1pbl9zdGF0ZS1cdTAwM2VjMzNfYWRtaW5fc3RhdGUgPSBjb25maWcuZW5hYmxlID8gRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQgOlxuK1x0XHRcdFx0XHRcdCAgICAgICBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4rXHRcdFx0XHRcdHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ERUxJVkVSSU5HO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1RFU1Q7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19PVEhFUkZBVUxUO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1VOS05PV047XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LypcbitcdCAqIHN0czIgaG9sZHMgdGhlIGNsYXNzIG9ubHkgaW4gdGhlIG9wZXJhdGlvbmFsIHN0YXRlcyBiZWxvdy4gSW4gYVxuK1x0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XG4rXHQgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpc1xuK1x0ICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHJlYWwgY2xhc3MtMCBQRDsgdXNlcnNwYWNlIGRpc2FtYmlndWF0ZXNcbitcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxuK1x0ICovXG4rXHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuK1x0XHRyZXR1cm4gcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyhcdTAwMjZzdGF0dXMpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcdTAwMjZtZWFzdXJlbWVudCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogMTAwbVcgcGVyIExTQiAqL1xuK1x0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbitcdGludCByZXQ7XG4rXHR1MzIgdVY7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDY0LjQ1bVYgcGVyIExTQiAqL1xuK1x0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcbitcdHJldHVybiBtaW5fdCh1MzIsIHVWLCBJTlRfTUFYKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVx1MDAzZWNoaXAtXHUwMDNlcHdfcmVhZF9sc2JfbVc7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXAgPSBwc2UtXHUwMDNlY2hpcDtcbitcdHU4IHByZ192YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKG1heF9tVyBcdTAwM2MgMCB8fCBtYXhfbVcgXHUwMDNlIGNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0KVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdHR5cGVfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07XG4rXHR2YWxfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW2NoaXAtXHUwMDNlcHdfc2V0X2NtZF07XG4rXHQvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovXG4rXHRpZiAoIXR5cGVfb3BjLVx1MDAzZXZhbGlkIHx8ICF2YWxfb3BjLVx1MDAzZXZhbGlkIHx8ICFjaGlwLVx1MDAzZXB3X3NldF9sc2JfbVcpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcbitcdCAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpblxuK1x0ICogdXNlci1kZWZpbmVkIG1vZGUgYnV0IHdpdGggdGhlIHByZXZpb3VzIGxpbWl0IHZhbHVlOyB0aGUgbmV4dFxuK1x0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cbitcdCAqL1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHR5cGVfb3BjLVx1MDAzZW9wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdmFsX29wYy1cdTAwM2VvcCwgcHJnX3ZhbCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XG4rXG4rXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJhbmdlWzBdLm1pbiA9IDA7XG4rXHRyYW5nZVswXS5tYXggPSBwc2UtXHUwMDNlY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQ7XG4rXG4rXHRvdXQtXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBjb25maWcucHJpb3JpdHk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1xuK1x0aWYgKHByaW8gXHUwMDNlIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCBvcGMtXHUwMDNlb3AsIHByaW8pO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0ge1xuK1x0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcbitcdC5waV9nZXRfcHdfc3RhdHVzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyxcbitcdC5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsXG4rXHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXG4rXHQucGlfZW5hYmxlID0gcnRwc2VfbWN1X3BvcnRfZW5hYmxlLFxuK1x0LnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLFxuK1x0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXG4rXHQucGlfZ2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0LFxuK1x0LnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCxcbitcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcbitcdC5waV9nZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvLFxuK1x0LnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnO1xuK1x0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXG4rXHQgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGFcbitcdCAqIGNvcnJ1cHQvcGFydGlhbCBmcmFtZSAoLUVCQURNU0cgLyAtRUJBREUpLiBSZXRyeSB0aG9zZSB3aXRoaW4gYVxuK1x0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXG4rXHQgKiBpbW1lZGlhdGVseS5cbitcdCAqL1xuK1x0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTtcbitcdGRvIHtcbitcdFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XG4rXHRcdGlmIChyZXQgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTlhJTyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FUkVNT1RFSU8gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQkFETVNHIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVCQURFKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRtc2xlZXAoUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMpO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCJmYWlsZWQgdG8gcmVhZCBNQ1UgaW5mb1xcblwiKTtcbitcbitcdHN3aXRjaCAoaW5mby1cdTAwM2VkZXZpY2VfaWQpIHtcbitcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcbitcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM4Yl9pbmZvO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzlfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOWNfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMTFfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMjFfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLCBcInVua25vd24gUFNFIGlkIDB4JXhcXG5cIixcbitcdFx0XHRcdCAgICAgaW5mby1cdTAwM2VkZXZpY2VfaWQpO1xuK1x0fVxuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZW1heF9wb3J0cyB8fCBpbmZvLVx1MDAzZW1heF9wb3J0cyBcdTAwM2UgUlRQU0VfTUNVX01BWF9QT1JUUylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICAgXCJNQ1UgcmVwb3J0cyBpbnZhbGlkIHBvcnQgY291bnQgJXVcXG5cIiwgaW5mby1cdTAwM2VtYXhfcG9ydHMpO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgXHUwMDI2ZXh0X2NvbmZpZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwiZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcXG5cIik7XG4rXG4rXHRkZXZfaW5mbyhwc2UtXHUwMDNlZGV2LCBcIiVzIE1DVSwgJXMgKGlkIDB4JTA0eCksICV1IHBvcnRzIGFjcm9zcyAldSBQU0UgY2hpcChzKVxcblwiLFxuK1x0XHQgcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKGluZm8tXHUwMDNlbWN1X3R5cGUpLCBwc2UtXHUwMDNlY2hpcC1cdTAwM2VuYW1lLFxuK1x0XHQgaW5mby1cdTAwM2VkZXZpY2VfaWQsIGluZm8tXHUwMDNlbWF4X3BvcnRzLCBleHRfY29uZmlnLm51bV9vZl9wc2VzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSlcbit7XG4rXHRyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSBkYXRhO1xuK1xuK1x0cnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7XG4rfVxuK1xuK2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbitcdHN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9pbmZvIGluZm87XG4rXHRpbnQgcmV0O1xuK1xuK1x0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcnRwc2VfbWN1X21zZykgIT0gUlRQU0VfTUNVX01TR19TSVpFKTtcbitcbitcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlbXV0ZXgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS1cdTAwM2VkZXYpO1xuK1x0aWYgKCFtYXRjaClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVOT0RFViwgXCJtaXNzaW5nIG1hdGNoIGRhdGFcXG5cIik7XG4rXHRwc2UtXHUwMDNlZGlhbGVjdCA9IG1hdGNoLVx1MDAzZWRpYWxlY3Q7XG4rXG4rXHQvKlxuK1x0ICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0XG4rXHQgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJ2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLlxuK1x0ICovXG4rXHRpZiAoIXBzZS1cdTAwM2VkaWFsZWN0IHx8XG4rXHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvIHx8XG4rXHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MgfHxcbitcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgICBcImRpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxcblwiKTtcbitcbitcdHBzZS1cdTAwM2Vwb2Vfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBzZS1cdTAwM2VkZXYsIFwicG93ZXJcIik7XG4rXHRpZiAoSVNfRVJSKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgUFRSX0VSUihwc2UtXHUwMDNlcG9lX3N1cHBseSksXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBQb0Ugc3VwcGx5XFxuXCIpO1xuK1xuK1x0ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXHUwMDNlZGV2LCBcImVuYWJsZVwiLCBHUElPRF9PVVRfSElHSCk7XG4rXHRpZiAoSVNfRVJSKGVuYWJsZV9ncGlvKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgUFRSX0VSUihlbmFibGVfZ3BpbyksXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3Bpb1xcblwiKTtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsIFx1MDAyNmluZm8pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHNlLVx1MDAzZXBvZV9zdXBwbHkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LCBcImZhaWxlZCB0byBlbmFibGUgUG9FIHN1cHBseVxcblwiKTtcbitcbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtXHUwMDNlZGV2LCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUsIHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkge1xuK1x0XHRyZXQgPSBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIHRydWUpO1xuK1x0XHQvKiBEaWFsZWN0cyB3aXRob3V0IGEgZ2xvYmFsLXN0YXRlIGNvbmNlcHQgKGUuZy4gQkNNKSByZXR1cm5cbitcdFx0ICogLUVPUE5PVFNVUFA7IHRyZWF0IHRoYXQgYXMgXCJubyBzZXBhcmF0ZSBlbmFibGUgcmVxdWlyZWRcIi5cbitcdFx0ICovXG4rXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cXG5cIik7XG4rXHRcdGlmICghcmV0KSB7XG4rXHRcdFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSwgcHNlKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LypcbitcdCAqIERlcGVuZGluZyBvbiB0aGUgTUNVIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gKHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudFxuK1x0ICogZm9yIGV2ZXJ5IGJvYXJkKSwgaXQgaXNuJ3Qga25vd24gd2hldGhlciB0aGUgUG9FIHN1YnN5c3RlbSBpcyBhY3RpdmUgb3JcbitcdCAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyXG4rXHQgKiBwb3dlciB0byBQRHMgd2l0aG91dCBhbnkgZXhwbGljaXQgZW5hYmxlLlxuK1x0ICovXG4rXG4rXHQvKiBwY2Rldi5vd25lciBpcyBzZXQgYnkgdGhlIHRyYW5zcG9ydCwgc28gdGhlIHJlZ2lzdGVyZWQgY29udHJvbGxlclxuK1x0ICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuXG4rXHQgKi9cbitcdHBzZS1cdTAwM2VwY2Rldi5vcHMgICAgICA9IFx1MDAyNnJ0cHNlX21jdV9vcHM7XG4rXHRwc2UtXHUwMDNlcGNkZXYuZGV2ICAgICAgPSBwc2UtXHUwMDNlZGV2O1xuK1x0cHNlLVx1MDAzZXBjZGV2LnR5cGVzICAgID0gRVRIVE9PTF9QU0VfQzMzO1xuK1x0cHNlLVx1MDAzZXBjZGV2Lm5yX2xpbmVzID0gaW5mby5tYXhfcG9ydHM7XG4rXHRwc2UtXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZO1xuK1x0cHNlLVx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDO1xuK1xuK1x0cmV0dXJuIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocHNlLVx1MDAzZWRldiwgXHUwMDI2cHNlLVx1MDAzZXBjZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X3JlZ2lzdGVyKTtcbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbitcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XG4rXHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbitcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbitcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuK1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbitcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXG4re1xuK1x0LyogQ2xhc3MgbGl2ZXMgaW4gdGhlIHVwcGVyIG5pYmJsZSBvZiBzdHMyLiAqL1xuK1x0cmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtXHUwMDNlc3RzMik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfZ2VuMl9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKVxuK3tcbitcdHN3aXRjaCAobWN1X3R5cGUpIHtcbitcdGNhc2UgMHgwMDpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkYzMTBcIjtcbitcdGNhc2UgMHgwMTpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkYyMzBcIjtcbitcdGNhc2UgMHgwMjpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkYzMDNcIjtcbitcdGNhc2UgMHgwMzpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkYxMDNcIjtcbitcdGNhc2UgMHgwNDpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkUxMDNcIjtcbitcdGNhc2UgMHgxMDpcdHJldHVybiBcIk51dm90b24gTTA1MTZcIjtcbitcdGNhc2UgMHgxMTpcdHJldHVybiBcIk51dm90b24gTTA1NjRcIjtcbitcdGNhc2UgMHgxMjpcdHJldHVybiBcIk51dm90b24gTlVDMDI5XCI7XG4rXHRkZWZhdWx0Olx0cmV0dXJuIFwidW5rbm93blwiO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbitcdC8qIEJDTSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlXG4rXHQgKiBcInJlbW90ZSBlbmFibGVcIiBiaXQgaW4gdGhlIHN5c3RlbS1zdGF0dXMgZmxhZ3MgYXQgcGF5bG9hZFs3XS5cbitcdCAqL1xuK1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcdTAwMjYgQklUKDIpKTtcbitcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuK1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuK1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4rXHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuK1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHQvKiBCQ00gcHV0cyB0aGUgZGV0ZWN0ZWQgY2xhc3MgaW4gcGF5bG9hZFszXSAoPT0gc3RzMykgZGlyZWN0bHkuXG4rXHQgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlXG4rXHQgKiBub2lzZS5cbitcdCAqL1xuK1x0cmV0dXJuIHN0YXR1cy1cdTAwM2VzdHMzIFx1MDAyNiAweDBmO1xuK31cbitcbitzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbit7XG4rXHRzd2l0Y2ggKG1jdV90eXBlKSB7XG4rXHRjYXNlIDB4MDA6XHRyZXR1cm4gXCJTVCBNaWNybyBTVDMyRjEwMFwiO1xuK1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDV4eCBMQU5cIjtcbitcdGNhc2UgMHgwMjpcdHJldHVybiBcIlNUIE1pY3JvIFNURjAzMEM4XCI7XG4rXHRjYXNlIDB4MDM6XHRyZXR1cm4gXCJOdXZvdG9uIE0wNThTQU5cIjtcbitcdGNhc2UgMHgwNDpcdHJldHVybiBcIk51dm90b24gTlVDMTIyXCI7XG4rXHRkZWZhdWx0Olx0cmV0dXJuIFwidW5rbm93blwiO1xuK1x0fVxuK31cbitcbisvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4yID0ge1xuK1x0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8sXG4rXHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLFxuK1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjJfbWN1X3R5cGVfc3RyLFxuK1x0Lm9wY29kZSA9IHtcbitcdFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cdD0gUlRQU0VfTUNVX09QKDB4MDApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4NDApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXG4rXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAxKSxcbitcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVF0gPSBSVFBTRV9NQ1VfT1AoMHgxNCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHg0NCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0OCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDQ5KSxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjEgPSB7XG4rXHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyxcbitcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MsXG4rXHQubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIsXG4rXHQub3Bjb2RlID0ge1xuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4MjApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyYiksXG4rXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyMSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDI2KSxcbitcdH0sXG4rfTtcbitcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjFfZGF0YSA9IHtcbitcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMSxcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4xX2RhdGEpO1xuK1xuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9kYXRhID0ge1xuK1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxuK307XG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfZGF0YSk7XG4rXG4rLyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqL1xuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YSA9IHtcbitcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMixcbitcdC5uYXRpdmVfaTJjID0gdHJ1ZSxcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChjb3JlKVwiKTtcbitNT0RVTEVfQVVUSE9SKFwiSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NzE3Njg0YzBjYmQ5MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xuQEAgLTAsMCArMSwxNzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJyZWFsdGVrLXBzZS1tY3UuaFwiXG4rXG4rLypcbisgKiBUaGUgY29yZSBoYXMgYWxyZWFkeSB3YWl0ZWQgUlRQU0VfTUNVX1JFU1BPTlNFX01TIGJlZm9yZSBjYWxsaW5nIHVzLCBzb1xuKyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXG4rICogTUNVIHByb2R1Y2VzIG1vcmUgc2xvd2x5LCBrZWVwIHBvbGxpbmcgYXQgdGhlIHR5cGljYWwgcmVzcG9uc2UgY2FkZW5jZVxuKyAqIHVwIHRvIHRoZSB3b3JzdC1jYXNlIGNlaWxpbmcuXG4rICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TXHRSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcbisjZGVmaW5lIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTXHQoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUyAvIFJUUFNFX01DVV9JMkNfUkVUUllfTVMpXG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXG4re1xuK1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4rXG4rXHQvKiBTZW5kIG9wY29kZSBhcyBTTUJ1cyBjb21tYW5kIGJ5dGU7IHJlbWFpbmluZyAxMSBieXRlcyBhcyBibG9jayBkYXRhICovXG4rXHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcbitcdFx0XHRcdFx0ICAgICAgKHU4ICopcmVxICsgMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1x0aW50IHRyaWVzLCByZXQ7XG4rXG4rXHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XG4rXHRcdGlmICh0cmllcyBcdTAwM2UgMClcbitcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4rXG4rXHRcdC8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqL1xuK1x0XHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXG4rXHRcdFx0XHRcdFx0ICAgIFJUUFNFX01DVV9NU0dfU0laRSxcbitcdFx0XHRcdFx0XHQgICAgKHU4ICopcmVzcCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgXHUwMDI2XHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcbitcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kLFxuK1x0LnJlY3YgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3YsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXG4re1xuK1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4rXHR2b2lkICpidWY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogaTJjX21hc3Rlcl9zZW5kKCkgbWF5IERNQSwgc28gdGhlIGJ1ZmZlciBtdXN0IG5vdCBiZSBvbiB0aGUgc3RhY2suICovXG4rXHRidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbitcdGtmcmVlKGJ1Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgPyAwIDogLUVJTztcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXHUwMDNlZGV2KTtcbitcdGludCB0cmllcywgcmV0O1xuK1x0dTggKmJ1ZjtcbitcbitcdC8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqL1xuK1x0YnVmID0ga21hbGxvYyhSVFBTRV9NQ1VfTVNHX1NJWkUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFidWYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Zm9yICh0cmllcyA9IDA7IHRyaWVzIFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xuK1x0XHRpZiAodHJpZXMgXHUwMDNlIDApXG4rXHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuK1xuK1x0XHRyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFKSB7XG4rXHRcdFx0bWVtY3B5KHJlc3AsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbitcdFx0XHRpZiAocnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkge1xuK1x0XHRcdFx0cmV0ID0gMDtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0cmV0ID0gLUVUSU1FRE9VVDtcbitvdXQ6XG4rXHRrZnJlZShidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmQsXG4rXHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlO1xuK1x0Ym9vbCB1c2VfbmF0aXZlO1xuK1xuK1x0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbitcdGlmICghbWF0Y2gpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgXCJtaXNzaW5nIG1hdGNoIGRhdGFcXG5cIik7XG4rXG4rXHQvKiBUaGUgZnJhbWluZyAocmF3IEkyQyB2cyBTTUJ1cykgaXMgY2FycmllZCBieSB0aGUgbWF0Y2ggZGF0YS4gKi9cbitcdHVzZV9uYXRpdmUgPSBtYXRjaC1cdTAwM2VuYXRpdmVfaTJjO1xuK1xuK1x0aWYgKHVzZV9uYXRpdmUpIHtcbitcdFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXHUwMDNlYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuK1x0XHRcdFx0XCJwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcXG5cIik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cdTAwM2VhZGFwdGVyLFxuK1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8XG4rXHRcdFx0XHRcdCAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0spKVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVPUE5PVFNVUFAsXG4rXHRcdFx0XHRcIlNNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxcblwiKTtcbitcdH1cbitcbitcdHBzZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNlKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBzZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwc2UtXHUwMDNlZGV2ID0gZGV2O1xuK1x0cHNlLVx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4rXHRwc2UtXHUwMDNldHJhbnNwb3J0ID0gdXNlX25hdGl2ZSA/IFx1MDAyNnJ0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA6IFx1MDAyNnJ0cHNlX21jdV9pMmNfc21idXNfb3BzO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3Rlcihwc2UpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfaTJjX29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1wiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgfSxcbitcdHsgLyogc2VudGluZWwgKi8gfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X2kyY19vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0cHNlX21jdV9pMmNfZHJpdmVyID0ge1xuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWVcdFx0PSBcInJlYWx0ZWstcHNlLW1jdS1pMmNcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlXHQ9IHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gsXG4rXHR9LFxuK1x0LnByb2JlXHRcdD0gcnRwc2VfbWN1X2kyY19wcm9iZSxcbit9O1xuK21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcbitcbitNT0RVTEVfQVVUSE9SKFwiSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChJMkMgdHJhbnNwb3J0KVwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkxY2FkYjU1NjlhYjQ0XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xuQEAgLTAsMCArMSwxNTUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcmRldi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJyZWFsdGVrLXBzZS1tY3UuaFwiXG4rXG4rI2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFRcdDE5MjAwXG4rI2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKDEwMClcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVRcdG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUylcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsIHBzZTtcbitcdHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXY7XG4rXHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xuK1x0c3BpbmxvY2tfdCByeF9sb2NrO1x0XHQvKiBwcm90ZWN0cyByeF9idWYgYW5kIHJ4X2xlbiAqL1xuK1x0c2l6ZV90IHJ4X2xlbjtcbitcdHU4IHJ4X2J1ZltSVFBTRV9NQ1VfTVNHX1NJWkVdO1xuK307XG4rXG4rI2RlZmluZSB0b19ydHBzZV9tY3VfdWFydChwKSAgY29udGFpbmVyX29mKHAsIHN0cnVjdCBydHBzZV9tY3VfdWFydCwgcHNlKVxuK1xuKy8qXG4rICogTm8gZnJhbWluZyBpcyBkb25lIGhlcmU6IGEgZ2xpdGNoZWQgZnJhbWUgY29zdHMgb25lIHRyYW5zYWN0aW9uLCB0aGVuXG4rICogdGhlIG5leHQgX3NlbmQgcmUtZnJhbWVzIGZyb20gcnhfbGVuIDAuIFJlc3luYyB3b3JrcyBieSByZXR1cm5pbmcgY291bnRcbisgKiAobm90IHRha2UpLCBkcm9wcGluZyBhbnkgb3ZlcmZsb3cgc28gc2VyZGV2IGtlZXBzIG5vIGxlZnRvdmVyIHRvIGJsZWVkXG4rICogaW50byB0aGUgbmV4dCBmcmFtZS5cbisgKi9cbitzdGF0aWMgc2l6ZV90IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldixcbitcdFx0XHRcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpO1xuK1x0c2l6ZV90IHRha2U7XG4rXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbitcdFx0dGFrZSA9IG1pbihjb3VudCwgc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpIC0gY3R4LVx1MDAzZXJ4X2xlbik7XG4rXHRcdGlmICh0YWtlKSB7XG4rXHRcdFx0bWVtY3B5KGN0eC1cdTAwM2VyeF9idWYgKyBjdHgtXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xuK1x0XHRcdGN0eC1cdTAwM2VyeF9sZW4gKz0gdGFrZTtcbitcdFx0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiA9PSBzaXplb2YoY3R4LVx1MDAzZXJ4X2J1ZikpXG4rXHRcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIGNvbnN1bWUgYWxsIHRvIGF2b2lkIGRlc3luYy9taXNhbGlnbm1lbnQgKi9cbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0ge1xuK1x0LnJlY2VpdmVfYnVmID0gcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSxcbitcdC53cml0ZV93YWtldXAgPSBzZXJkZXZfZGV2aWNlX3dyaXRlX3dha2V1cCxcbit9O1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7XG4rXHRpbnQgd3JpdHRlbjtcbitcbitcdC8qIGNsZWFyIGFueSBsZWZ0b3ZlciByeCBzdGF0ZSBiZWZvcmUgdHJhbnNtaXR0aW5nICovXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbitcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuK1x0XHRjdHgtXHUwMDNlcnhfbGVuID0gMDtcbitcdH1cbitcbitcdHdyaXR0ZW4gPSBzZXJkZXZfZGV2aWNlX3dyaXRlKGN0eC1cdTAwM2VzZXJkZXYsIChjb25zdCB1OCAqKXJlcSwgc2l6ZW9mKCpyZXEpLFxuK1x0XHRcdFx0ICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7XG4rXHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXHRpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuK1xuK1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUsIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVQpKVxuK1x0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuK1x0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiAhPSBzaXplb2YoKnJlc3ApKVxuK1x0XHRcdHJldHVybiAtRUlPO1xuK1xuK1x0XHRtZW1jcHkocmVzcCwgY3R4LVx1MDAzZXJ4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzID0ge1xuK1x0LnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLFxuK1x0LnJlY3YgPSBydHBzZV9tY3VfdWFydF9yZWN2LFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxuK3tcbitcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnNlcmRldi1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eDtcbitcdGludCByZXQ7XG4rXG4rXHRjdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjdHgpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y3R4LVx1MDAzZXNlcmRldiA9IHNlcmRldjtcbitcdGN0eC1cdTAwM2Vwc2UuZGV2ID0gZGV2O1xuK1x0Y3R4LVx1MDAzZXBzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0Y3R4LVx1MDAzZXBzZS50cmFuc3BvcnQgPSBcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKTtcbitcbitcdHNlcmRldl9kZXZpY2Vfc2V0X2RydmRhdGEoc2VyZGV2LCBjdHgpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsIFx1MDAyNnJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpO1xuK1xuK1x0cmV0ID0gZGV2bV9zZXJkZXZfZGV2aWNlX29wZW4oZGV2LCBzZXJkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIG9wZW4gc2VyZGV2XFxuXCIpO1xuK1xuK1x0Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgXCJjdXJyZW50LXNwZWVkXCIsIFx1MDAyNnNwZWVkKTtcbitcdHNlcmRldl9kZXZpY2Vfc2V0X2JhdWRyYXRlKHNlcmRldiwgc3BlZWQpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfcGFyaXR5KHNlcmRldiwgU0VSREVWX1BBUklUWV9OT05FKTtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXHUwMDI2Y3R4LVx1MDAzZXBzZSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMVwiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1nZW4yXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuK1x0eyAvKiBzZW50aW5lbCAqLyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7XG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicmVhbHRlay1wc2UtbWN1LXVhcnRcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXG4rXHR9LFxuK1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuK307XG4rbW9kdWxlX3NlcmRldl9kZXZpY2VfZHJpdmVyKHJ0cHNlX21jdV91YXJ0X2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOWE2ZGEyYzhmMzdkOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICsxLDkwIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbitcbisjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxuKyNkZWZpbmUgX1JFQUxURUtfUFNFX01DVV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisvKlxuKyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuKyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXG4rICogdW5kZXJseWluZyB0cmFuc3BvcnQ6IHRoZSBjb3JlIHBhY2VzIHRyYW5zYWN0aW9ucyBieSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcbisgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4rICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xuKyAqIG5lZWRpbmcgdXAgdG8gfjFzIHRvIHByb2R1Y2UgYSByZXBseS5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1x0XHRcdDI1XG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TXHRcdDEwMDBcbitcbisvKlxuKyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2VcbisgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4rICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcbisgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcdFx0MzAwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVNcdFx0XHQxMDBcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVx0XHRcdDEyXG4rXG4rc3RydWN0IHJ0cHNlX21jdV9tc2cge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggc2VxX251bTtcbitcdHU4IHBheWxvYWRbOV07XG4rXHR1OCBjaGVja3N1bTtcbit9IF9fcGFja2VkO1xuK1xuKy8qXG4rICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBCQ00gZGlhbGVjdDsgUlRMIG5ldmVyIGVtaXRzIHRoZW0pLlxuKyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxuKyAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXHRcdDB4ZmRcdC8qIC1FQkFERSAgICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXHRcdDB4ZmVcdC8qIC1FQkFETVNHICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX05PVF9SRUFEWVx0XHQweGZmXHQvKiAtRUFHQUlOICAqL1xuK1xuKy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBydHBzZV9tY3VfcmVzcF9pc19maW5hbChjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRyZXR1cm4gcmVzcC1cdTAwM2VvcGNvZGUgPT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuK1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURSB8fFxuK1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XG4rfVxuK1xuKy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cbitzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3Q7XG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm87XG4rc3RydWN0IHJ0cHNlX21jdV9jdHJsO1xuK1xuKy8qIFBlci1jb21wYXRpYmxlIG1hdGNoIGRhdGEgKHRoZSBvZl9tYXRjaCAuZGF0YSkuICovXG4rc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcbitcdGJvb2wgbmF0aXZlX2kyYztcdC8qIHJhdy1JMkMgZnJhbWluZyAodnMgU01CdXMpOyBJMkMgdHJhbnNwb3J0IG9ubHkgKi9cbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyB7XG4rXHRpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7XG4rXHRpbnQgKCpyZWN2KShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfY3RybCB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2IHBjZGV2O1xuK1x0c3RydWN0IG11dGV4IG11dGV4OyAvKiBzZXJpYWxpemVzIE1DVSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zYWN0aW9ucyAqL1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXA7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgKnRyYW5zcG9ydDtcbitcbitcdHN0cnVjdCByZWd1bGF0b3IgKnBvZV9zdXBwbHk7XG4rfTtcbitcbitpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKTtcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGE7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9kYXRhO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGE7XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjo0MjoyNi4wMDI4OTYzOTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjAzNTQ3MjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbCBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IGRyaXZlciBmb3IgYSBSZWFsdGVrIFBTRSBNQ1UsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BzZS1wZC9gLiBUaGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gSXQgc3VwcG9ydHMgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cywgd2hpY2ggbWVhbnMgd2UgY2FuIGxldmVyYWdlIGV4aXN0aW5nIGZ1enppbmcgY2FwYWJpbGl0aWVzIGZvciB0aGVzZSBpbnRlcmZhY2VzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgc3RhbmRhcmQgZmlsZXM6IGRvY3VtZW50YXRpb24sIE1BSU5UQUlORVJTIHVwZGF0ZSwgS2NvbmZpZywgTWFrZWZpbGUsIGFuZCB0aGUgY29yZSBkcml2ZXIgZmlsZXMgKGByZWFsdGVrLXBzZS1tY3UtY29yZS5jYCwgYHJlYWx0ZWstcHNlLW1jdS1pMmMuY2AsIGByZWFsdGVrLXBzZS1tY3UtdWFydC5jYCwgYW5kIHRoZSBoZWFkZXIpLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBoYW5kbGUgdGhpcz8gR2l2ZW4gaXQncyBJMkMgYW5kIFVBUlQsIHRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcy4gU3l6a2FsbGVyIGNhbiBmdXp6IEkyQyBkZXZpY2VzIHZpYSBgL2Rldi9pMmMtKmAgb3IgdmlydHVhbCBJMkMgZGV2aWNlcywgYW5kIFVBUlQgZGV2aWNlcyB2aWEgYHNlcmRldmAuIEl0IGFscmVhZHkgaGFzIEkyQyBzdXBwb3J0LCBpbmNsdWRpbmcgZm9yIHBzZXVkby1kZXZpY2VzLiBUaGUgcXVlc3Rpb24gaXMgcmVhY2hhYmlsaXR5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSTJDIGRldmljZXMgY2FuIGJlIGluc3RhbnRpYXRlZCB0aHJvdWdoIHN5c2ZzIChgbmV3X2RldmljZWApIG9yIGRldmljZSB0cmVlIG92ZXJsYXlzLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIGBwc2VfY29udHJvbGxlcl9kZXZgLCB3aGljaCBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBldGh0b29sIFBTRSBjb21tYW5kcy4gVGhhdCdzIGdvb2QsIHNvIHRoZSBldGh0b29sIGludGVyZmFjZSBjYW4gcmVhY2ggdGhpcyBpZiB0aGUgZGV2aWNlIGlzIGluc3RhbnRpYXRlZC4gVGhpcyBkZWZpbml0ZWx5IGluY3JlYXNlcyBpdHMgZnV6emluZyB2YWx1ZS5cblxuRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBuZXcgZHJpdmVyIHdpdGggZnVuY3Rpb25hbCBjaGFuZ2VzLCBhIGdvb2QgdGFyZ2V0LlxuXG5MZXQncyBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMuIFdlIGhhdmUgYFBTRV9SRUFMVEVLX01DVWAsIGBQU0VfUkVBTFRFS19NQ1VfSTJDYCwgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIHRvIGd1aWRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gTG9va2luZyBhdCBgcmVhbHRlay1wc2UtbWN1LWNvcmUuY2AsIHdlIHNlZSBhIHJhbmdlIG9mIGZ1bmN0aW9uczogYHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZWAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3YCwgYHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlYCwgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWAsIGBydHBzZV9tY3VfcG9ydF9kaXNhYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdGAsIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHJpb2AsIGBydHBzZV9tY3VfcG9ydF9zZXRfcHJpb2AsIGBydHBzZV9tY3VfcmVnaXN0ZXJgLCBgcnRwc2VfbWN1X2RvX3hmZXJgLCBgcnRwc2VfbWN1X3BvcnRfcXVlcnlgLCBhbmQgYHJ0cHNlX21jdV9wb3J0X2NtZGAuXG5cbkZvciBJMkMsIHdlIGhhdmUgYHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZGAsIGBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZGAsIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YCwgYW5kIGBydHBzZV9tY3VfaTJjX3Byb2JlYC5cblxuRm9yIFVBUlQsIHdlIGhhdmUgYHJ0cHNlX21jdV91YXJ0X3JlY2VpdmVgLCBgcnRwc2VfbWN1X3VhcnRfc2VuZGAsIGBydHBzZV9tY3VfdWFydF9yZWN2YCwgYW5kIGBydHBzZV9tY3VfdWFydF9wcm9iZWAuXG5cblRvIHRhcmdldCwgSSB3aWxsIGxpc3QgYFBTRV9SRUFMVEVLX01DVV9JMkNgIGFuZCBgUFNFX1JFQUxURUtfTUNVX1VBUlRgIGluIHRoZSBjb25maWdzLlxuXG5Gb3IgZnV6emluZyBmb2N1cyBzeW1ib2xzLCBJIHdpbGwgcHJpb3JpdGl6ZSB0aGVzZSBmdW5jdGlvbnMsIGZvciBub3cuXG5cbkxldCdzIGxpc3QgdGhlc2UgY29uZmlncyB0byBlbnN1cmUgdGhpcyBpcyBlYXN5IHRvIHJlcHJvZHVjZTpcbiogICBgUFNFX1JFQUxURUtfTUNVX0kyQ2BcbiogICBgUFNFX1JFQUxURUtfTUNVX1VBUlRgXG5cbkFuZCBJJ2xsIHVzZSB0aGVzZSBmdW5jdGlvbnMgYXMgZnV6emluZyB0YXJnZXRzOlxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2BcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd2BcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YFxuKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgXG4qICAgYHJ0cHNlX21cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjQyOjQyLjAzODM3MTE5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY0NTY0ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBTRV9SRUFMVEVLX01DVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZz0xND1pZiBQU0VfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTE1LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjE2OmNvbmZpZyBQU0VfUkVBTFRFS19NQ1VcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjEtXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MjI6Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9JMkNcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcXFwiXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjQtXFx0ZGVwZW5kcyBvbiBJMkNcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzoyNTpcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzItXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MzM6Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzQtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVxcXCJcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0zNS1cXHRkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MzY6XFx0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTM3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZT00PW9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgKz0gcHNlX2NvcmUub1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICs9IHJlYWx0ZWstcHNlLW1jdS1jb3JlLm9cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQykgKz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSArPSByZWFsdGVrLXBzZS1tY3UtdWFydC5vXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICs9IHBzZV9yZWd1bGF0b3Iub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjo0Mjo0NC42MDI5NDI1MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDcyMTE4MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWx0ZWsgUFNFIE1DVSBEcml2ZXIgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyBob3cgaXQncyBzdHJ1Y3R1cmVkOiBpdCBpbXBsZW1lbnRzIHRoZSBldGh0b29sIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMsIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB1c2luZyBuZXRsaW5rLiBUaGF0J3MgZ29vZCwga2VlcHMgaXQgbWFuYWdlYWJsZSBhbmQgZmxleGlibGUuIEkgc2VlIHRoYXQgaW5zdGFudGlhdGlvbiBjYW4gYmUgZG9uZSBlaXRoZXIgdGhyb3VnaCBJMkMgb3Igc2VyZGV2LiBNYWtlcyBzZW5zZTsgZ29vZCBkZXNpZ24gY2hvaWNlIGZvciBmbGV4aWJpbGl0eSBpbiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgUFNFX1JFQUxURUtfTUNVX0kyQ2AgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAsIHdoaWNoIGFyZSB3aGF0IEknZCBleHBlY3QuXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBjb21wb25lbnRzLiBMZXQncyBtYWtlIHN1cmUgSSdtIGNsZWFyIG9uIHRoZSBrZXkgc3ltYm9sczogdGhlIFBTRSBjb250cm9sbGVyIG9wcyBhbmQgdGhlIHRyYW5zcG9ydCBvcHMuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkLiBJJ2xsIG5lZWQgdG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcuXG5cbkFoLCBoZXJlJ3MgYSBkZXRhaWxlZCBsaXN0IHRoYXQgSSB3aWxsIHVzZSBhcyBteSBjb3JlIHVuZGVyc3RhbmRpbmcgb2YgZnVuY3Rpb25hbGl0eTpcblxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2BcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd2BcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YFxuKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvYFxuKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHJpb2BcbiogICBgcnRwc2VfbWN1X2RvX3hmZXJgXG4qICAgYHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZGBcbiogICBgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2YFxuKiAgIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kYFxuKiAgIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YFxuKiAgIGBydHBzZV9tY3VfdWFydF9yZWNlaXZlYFxuKiAgIGBydHBzZV9tY3VfdWFydF9zZW5kYFxuKiAgIGBydHBzZV9tY3VfdWFydF9yZWN2YFxuXG5UaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBicmVha2Rvd24gb2YgdGhlIGZ1bmN0aW9uYWxpdHksIGNvdmVyaW5nIHBvd2VyIG1hbmFnZW1lbnQsIGFuZCBjb21tdW5pY2F0aW9uIGludGVyZmFjZXMuIE5vdywgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gYmUuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzczLCJPdXRwdXRUb2tlbnMiOjQxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjo0Mjo1NC4wNzUwNjM0NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTI5NDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2RvX3hmZXJcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfc21idXNfc2VuZFwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2XCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2XCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWNlaXZlXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfUkVBTFRFS19NQ1VfSTJDXCIsXG4gICAgXCJQU0VfUkVBTFRFS19NQ1VfVUFSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZW5hYmxlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9kaXNhYmxlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X3NldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfZG9feGZlclwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmRcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3ZcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3NlbmRcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSwgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHZpYSBJMkMgb3IgVUFSVC4gSXQgaW1wbGVtZW50cyB0aGUgZXRodG9vbCBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgUFNFIG9wZXJhdGlvbnMgYW5kIHRoZSB0cmFuc3BvcnQgbGF5ZXIgaW1wbGVtZW50YXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 16:25:16 +0000 UTC FinishedAt: 2026-07-10 16:42:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6d86ce0da0d5631721c142ea9bb5499cc129b347", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6d86ce0da0d5631721c142ea9bb5499cc129b347", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART" ], "series_id": "85511d49-3b92-4127-a745-9b557f5ff2fe" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtpse_mcu_port_get_admin_state", "rtpse_mcu_port_get_pw_status", "rtpse_mcu_port_get_pw_class", "rtpse_mcu_port_get_actual_pw", "rtpse_mcu_port_get_voltage", "rtpse_mcu_port_enable", "rtpse_mcu_port_disable", "rtpse_mcu_port_get_pw_limit", "rtpse_mcu_port_set_pw_limit", "rtpse_mcu_port_get_pw_limit_ranges", "rtpse_mcu_port_get_prio", "rtpse_mcu_port_set_prio", "rtpse_mcu_do_xfer", "rtpse_mcu_i2c_smbus_send", "rtpse_mcu_i2c_smbus_recv", "rtpse_mcu_i2c_native_send", "rtpse_mcu_i2c_native_recv", "rtpse_mcu_uart_receive", "rtpse_mcu_uart_send", "rtpse_mcu_uart_recv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2RvX3hmZXImIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfc21idXNfcmVjdiYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRmNDhmNGJmY2RmYTMwZTUyN2RlZjQ0ZGFhMmZmYTlkN2FjOWRmMTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAxNjo0MjoyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczMzMwNjE5M2RiNTdlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTc2IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogUmVhbHRlayBQU0UgTUNVXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOiB8XG4mIzQzOyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudClcbiYjNDM7ICBoYXJkd2FyZSBvbiBhIHJhbmdlIG9mIG1hbmFnZWQgUG9FIHN3aXRjaGVzLiBUaGUgaG9zdCBDUFUgdGFsa3Mgb25seSB0b1xuJiM0MzsgIHRoaXMgTUNVIC0gb3ZlciBJMkMvU01CdXMgb3IgVUFSVCAtIHVzaW5nIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDtcbiYjNDM7ICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkXG4mIzQzOyAgZGlyZWN0bHkuIEZvciBleGFtcGxlLCBvbiB0aGUgWnl4ZWwgR1MxOTAwLTEwSFAgdGhlIFNvQyByZWFjaGVzIHRoZSBNQ1VcbiYjNDM7ICBvdmVyIFVBUlQsIGFuZCB0aGUgTUNVIG1hbmFnZXMgdGhlIG9uLWJvYXJkIFBTRSBjaGlwLlxuJiM0MztcbiYjNDM7ICBUaGlzIGJpbmRpbmcgZGVzY3JpYmVzIHRoZSBNQ1UgdG9nZXRoZXIgd2l0aCBpdHMgUmVhbHRlayBmaXJtd2FyZTogdGhlXG4mIzQzOyAgZmlybXdhcmUgYW5kIGl0cyBob3N0IHByb3RvY29sLCB3aGljaCBhcmUgc3RhYmxlIGFjcm9zcyBib2FyZHMuIFRoZVxuJiM0MzsgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGVcbiYjNDM7ICBQU0Ugc2lsaWNvbiBiZWhpbmQgdGhlIE1DVSAoUmVhbHRlayBSVEw4MjN4L1JUTDgyMzkqIG9yIEJyb2FkY29tXG4mIzQzOyAgQkNNNTl4eHgpIGlzIHJlcG9ydGVkIGJ5IHRoZSBNQ1UgYW5kIGRldGVjdGVkIGF0IHJ1bnRpbWUgLSBuZWl0aGVyIGlzXG4mIzQzOyAgbmFtZWQgaGVyZS5cbiYjNDM7XG4mIzQzOyAgVHdvIHByb3RvY29sIGdlbmVyYXRpb25zIGV4aXN0LCBib3RoIFJlYWx0ZWsmIzM5O3M6XG4mIzQzOyAgICBnZW4xICBvbGRlciBib2FyZHMsIHdoZXJlIHRoZSBNQ1UgZnJvbnRzIEJyb2FkY29tIFBTRSBzaWxpY29uXG4mIzQzOyAgICBnZW4yICB0aGUgYWx0ZXJlZCBwcm90b2NvbCB1c2VkIHdpdGggUmVhbHRlayYjMzk7cyBvd24gUFNFIHNpbGljb25cbiYjNDM7XG4mIzQzOyAgT24gYW4gSTJDIGF0dGFjaG1lbnQgdGhlIGZyYW1pbmcgdGhlIE1DVSBmaXJtd2FyZSBleHBlY3RzIGlzIHBhcnQgb2YgdGhlXG4mIzQzOyAgY29tcGF0aWJsZTogJiMzOTstc21idXMmIzM5OyAocmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSBhbmQgYSByZXBlYXRlZFxuJiM0MzsgIHN0YXJ0KSBvciAmIzM5Oy1pMmMmIzM5OyAoYmFyZSBibG9jayB3cml0ZXMgYW5kIHJlYWRzKS4gQSBVQVJUIGF0dGFjaG1lbnQgY2Fycmllc1xuJiM0MzsgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJiMzOTtzZXJpYWwmIzM5OyBub2RlLlxuJiM0MztcbiYjNDM7ICBFYWNoIGJvYXJkIGFkZGl0aW9uYWxseSBjYXJyaWVzIGEgZGV2aWNlLXNwZWNpZmljIGNvbXBhdGlibGUgdGhhdCBmYWxsc1xuJiM0MzsgIGJhY2sgdG8gb25lIG9mIHRoZSBwcm90b2NvbCBjb21wYXRpYmxlcyBhYm92ZS4gRHJpdmVycyBiaW5kIG9uIHRoZVxuJiM0MzsgIHByb3RvY29sIGNvbXBhdGlibGU7IHRoZSBkZXZpY2Utc3BlY2lmaWMgc3RyaW5nIGlkZW50aWZpZXMgdGhlIGJvYXJkIGFuZFxuJiM0MzsgIHJlc2VydmVzIGEgcGxhY2UgZm9yIGEgZnV0dXJlIHBlci1ib2FyZCBxdWlyayB3aXRob3V0IGhhdmluZyB0byByZXRyb2ZpdFxuJiM0MzsgIGRldmljZSB0cmVlcyBhbHJlYWR5IGluIHRoZSBmaWVsZC5cbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIG9uZU9mOlxuJiM0MzsgICAgICAjIFVBUlRcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkwMC0xMGhwLWExLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjFcbiYjNDM7XG4mIzQzOyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nXG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MjAtMjRocC12Mi1wc2VcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4mIzQzO1xuJiM0MzsgICAgICAjIFVBUlRcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkwMC0xMGhwLWIxLXBzZVxuJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwseG1nMTkxNS0xMGVwLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjJcbiYjNDM7XG4mIzQzOyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nXG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCx4czE5MzAtMTJocC1wc2VcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXG4mIzQzO1xuJiM0MzsgICAgICAjIEkyQywgcmF3IGZyYW1pbmdcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIGxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHBvd2VyLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBSZWd1bGF0b3Igc3VwcGx5aW5nIHRoZSBQb0UgcG93ZXIgcmFpbC5cbiYjNDM7XG4mIzQzOyAgZW5hYmxlLWdwaW9zOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sI1xuJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvc2VyaWFsL3NlcmlhbC1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXG4mIzQzOyAgIyBBICYjMzk7LXNtYnVzJiMzOTsvJiMzOTstaTJjJiMzOTsgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICYjMzk7cmVnJiMzOTsgYW5kXG4mIzQzOyAgIyBjYW5ub3QgY2Fycnkgc2VyaWFsIGJ1cyBwcm9wZXJ0aWVzLiBBIGJhcmUgZ2VuIGNvbXBhdGlibGUgaXMgYSBVQVJUXG4mIzQzOyAgIyBhdHRhY2htZW50OiBubyAmIzM5O3JlZyYjMzk7LCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIHJlZ1xuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXG4mIzQzOyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6IGZhbHNlXG4mIzQzO1xuJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudFxuJiM0MzsgIC0gfFxuJiM0MzsgICAgaTJjIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7enl4ZWwseHMxOTMwLTEyaHAtcHNlXCYjMzQ7LCBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBpMmMge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcJiMzNDssIFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBVQVJUIGF0dGFjaG1lbnRcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIHNlcmlhbCB7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3p5eGVsLGdzMTkwMC0xMGhwLWExLXBzZVwmIzM0OywgXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjFcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSBcdTAwM2MxOTIwMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uM2IyMWU0NmJlNjhhMWYgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0yMjcxNiw2ICYjNDM7MjI3MTYsMTMgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0aW5jbHVkZS9zb3VuZC9ydCouaFxuIEY6XHRzb3VuZC9zb2MvY29kZWNzL3J0KlxuIFxuJiM0MztSRUFMVEVLIFBTRSBNQ1UgRFJJVkVSXG4mIzQzO006XHRKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuJiM0MztGOlx0ZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdSpcbiYjNDM7XG4gUkVBTFRFSyBPVFRPIFdBVENIRE9HXG4gTTpcdFNhbmRlciBWYW5oZXVsZSBcdTAwM2NzYW5kZXJAc3ZhbmhldWxlLm5ldFx1MDAzZVxuIEw6XHRsaW51eC13YXRjaGRvZ0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG5pbmRleCA3ZWYyOTY1N2VlNWRkMS4uYTBmMmFlNjY4YzY3YzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbkBAIC0xMyw2ICYjNDM7MTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuIFxuIGlmIFBTRV9DT05UUk9MTEVSXG4gXG4mIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VcbiYjNDM7XHR0cmlzdGF0ZVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVIGRyaXZlci4gVGhpcyBpcyBzZWxlY3RlZFxuJiM0MztcdCAgYXV0b21hdGljYWxseSBieSB0aGUgdHJhbnNwb3J0IG9wdGlvbnMgYmVsb3cuXG4mIzQzO1xuJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVX0kyQ1xuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkNcbiYjNDM7XHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0VcbiYjNDM7XHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxuJiM0MztcdCAgdmlhIEkyQy9TTUJ1cy4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbFxuJiM0MztcdCAgUFNFIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbiYjNDM7XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLlxuJiM0MztcbiYjNDM7Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xuJiM0MztcdHNlbGVjdCBQU0VfUkVBTFRFS19NQ1VcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuJiM0MztcdCAgaGFyZHdhcmUgb24gdmFyaW91cyBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMsIGF0dGFjaGVkXG4mIzQzO1x0ICB2aWEgVUFSVC4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbCBQU0VcbiYjNDM7XHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbiYjNDM7XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC5cbiYjNDM7XG4gY29uZmlnIFBTRV9SRUdVTEFUT1JcbiBcdHRyaXN0YXRlIFwmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwmIzM0O1xuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuaW5kZXggY2M3OGY3ZWE3ZjVmNzEuLjljY2E1OTAwZmUzNDIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbkBAIC0zLDYgJiM0MzszLDkgQEBcbiBcbiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vXG4gXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtY29yZS5vXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXG4mIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVCkgJiM0Mzs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgJiM0Mzs9IHBzZV9yZWd1bGF0b3Iub1xuIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAub1xuIG9iai0kKENPTkZJR19QU0VfU0kzNDc0KSAmIzQzOz0gc2kzNDc0Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBhNWJiNzg0MzYwYTVlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xuQEAgLTAsMCAmIzQzOzEsOTkzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSBmcm9udGluZyBQU0Ugc2lsaWNvbiBvbiB2YXJpb3VzXG4mIzQzOyAqIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcy4gVGhlIE1DVSBzcGVha3MgYSAxMi1ieXRlIGZpeGVkLWZyYW1lXG4mIzQzOyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlXG4mIzQzOyAqIHByb3RvY29sIHZpYSBhIHBlci1kaWFsZWN0IG9wY29kZSB0YWJsZSBhbmQgcmVzcG9uc2UgcGFyc2Vycy5cbiYjNDM7ICpcbiYjNDM7ICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGVcbiYjNDM7ICogYWN0dWFsIFBTRSBzaWxpY29uOiB0aGUgaG9zdCBDUFUgdGFsa3MgdG8gdGhlIE1DVSBvdmVyIEkyQy9TTUJ1cyBvclxuJiM0MzsgKiBVQVJULCBhbmQgdGhlIE1DVSBpbiB0dXJuIG1hbmFnZXMgdGhlIFBTRSBjaGlwcyBvbiB0aGUgYm9hcmQuIFRoZSBNQ1VcbiYjNDM7ICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbC4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3RcbiYjNDM7ICogYWNjZXNzZWQgZGlyZWN0bHk7IGV2ZXJ5dGhpbmcgZ29lcyB0aHJvdWdoIE1DVSBjb21tYW5kcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLlxuJiM0MzsgKiBUd28gZ2VuZXJhdGlvbnMgYXJlIHN1cHBvcnRlZDogR2VuMSBiZWluZyB1c2VkIG9uIG9sZGVyIHN3aXRjaGVzIHdoZXJlXG4mIzQzOyAqIHRoZSBNQ1UgZnJvbnRzIGFuZCBtYW5hZ2VzIEJyb2FkY29tIFBTRSBzaWxpY29uOyBHZW4yIGJlaW5nIHVzZWQgd2l0aFxuJiM0MzsgKiBSZWFsdGVrIFBTRSBzaWxpY29uLiBUaGUgdHdvIHNoYXJlIGZyYW1lIGZvcm1hdCBhbmQgYSBzdW0tbW9kLTI1NlxuJiM0MzsgKiBjaGVja3N1bSBidXQgZGl2ZXJnZSBvbiBvcGNvZGUgbnVtYmVycyBhbmQgb24gYSBmZXcgcmVzcG9uc2UgbGF5b3V0cztcbiYjNDM7ICogdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwZXItZGlhbGVjdCBvcGNvZGUgdGFibGUgYW5kIHBhcnNlciBob29rcy5cbiYjNDM7ICpcbiYjNDM7ICogT3V0IG9mIHNjb3BlOiBQU0UgY2hpcHMgdGhhdCBhcmUgaW50ZXJmYWNlZCBkaXJlY3RseSBmcm9tIHRoZSBob3N0XG4mIzQzOyAqIHdpdGhvdXQgYSBtYW5hZ2VtZW50IE1DVSwgTUNVIGRlc2lnbnMgdGhhdCBzcGVhayBhbiB1bnJlbGF0ZWQgcHJvdG9jb2xcbiYjNDM7ICogZmFtaWx5LCBhbmQgXCYjMzQ7ZHVtYiBQU0VcJiMzNDsgbW9kZXMgd2hlcmUgbm8gaG9zdCBjb250cm9sIGlzIHdpcmVkIHVwIGF0IGFsbC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBjb3JlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCwgZGVjb2RpbmcvZW5jb2Rpbmcgb2YgTUNVXG4mIzQzOyAqIHJlc3BvbnNlcywgYW5kIHRoZSBwc2VfY29udHJvbGxlcl9vcHMgaW50ZWdyYXRpb24uIFRyYW5zcG9ydCBtb2R1bGVzXG4mIzQzOyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2XG4mIzQzOyAqIGNhbGxiYWNrcy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlubWF4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JlYWx0ZWstcHNlLW1jdS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcdFx0MHgwMTM4XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5XHRcdDB4MDAzOVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUNcdFx0MHgwMTM5XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVx0XHQweGUxMTFcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxXHRcdDB4ZTEyMVxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRURcdFx0MHgwMFxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkdcdFx0MHgwMVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HXHRcdDB4MDJcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVFx0XHRcdDB4MDNcdC8qIEdlbjEtb25seTsgcmVzZXJ2ZWQgb24gR2VuMiAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVFx0XHQweDA0XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUXHRcdDB4MDVcdC8qIEdlbjEtb25seTsgcmVzZXJ2ZWQgb24gR2VuMiAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HXHRcdDB4MDZcbiYjNDM7XG4mIzQzOy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlx0MHgwMlxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTUFYX1BPUlRTXHRcdFx0NDhcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFlcdFx0M1xuJiM0MztcbiYjNDM7ZW51bSBydHBzZV9tY3VfY21kIHtcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcbiYjNDM7XG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRSxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFMsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUcsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxuJiM0MztcbiYjNDM7XHRSVFBTRV9NQ1VfTlVNX0NNRFMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSB7XG4mIzQzO1x0dTggb3A7XG4mIzQzO1x0Ym9vbCB2YWxpZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcdHsgLm9wID0gKG9wYyksIC52YWxpZCA9IHRydWUgfVxuJiM0MztcbiYjNDM7LyogUGFyc2VkIE1DVSByZXNwb25zZSBzdHJ1Y3R1cmVzIChkZWNvZGVkIGZyb20gcnRwc2VfbWN1X21zZyByZXBsaWVzKSAqL1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9pbmZvIHtcbiYjNDM7XHR1OCBtYXhfcG9ydHM7XG4mIzQzO1x0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xuJiM0MztcdHUxNiBkZXZpY2VfaWQ7XG4mIzQzO1x0dTggc3dfdmVyO1xuJiM0MztcdHU4IG1jdV90eXBlO1xuJiM0MztcdHU4IGNvbmZpZ19zdGF0dXM7XG4mIzQzO1x0dTggZXh0X3ZlcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7XG4mIzQzO1x0dTggdXZsbztcbiYjNDM7XHR1OCBvdmxvO1xuJiM0MztcdGJvb2wgcHJlYWxsb2NfZW5hYmxlO1xuJiM0MztcdHU4IG51bV9vZl9wc2VzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XG4mIzQzO1x0dTggc3RzMTtcbiYjNDM7XHR1OCBzdHMyO1xuJiM0MztcdHU4IHN0czM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xuJiM0MztcdHUxNiB2b2x0YWdlX3JhdztcdC8qIDY0LjQ1bVYvTFNCICovXG4mIzQzO1x0dTE2IGN1cnJlbnRfcmF3O1x0LyogMW1BL0xTQiAqL1xuJiM0MztcdHUxNiB0ZW1wZXJhdHVyZV9yYXc7XHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xuJiM0MztcdHUxNiBwb3dlcl9yYXc7XHRcdC8qIDEwMG1XL0xTQiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBlbmFibGU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyB7XG4mIzQzO1x0dTggbWF4X3Bvd2VyO1xuJiM0MztcdHU4IHByaW9yaXR5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSBvcGNvZGVbUlRQU0VfTUNVX05VTV9DTURTXTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcbiYjNDM7XHQgKiBkaWFsZWN0IHN1cHBsaWVzIGl0cyBvd24uIE90aGVyIHJlc3BvbnNlcyBzaGFyZSBvbmUgbGF5b3V0IGFuZCBhcmVcbiYjNDM7XHQgKiBkZWNvZGVkIGRpcmVjdGx5IC0gYSBkaWFsZWN0IHRoYXQgZGl2ZXJnZXMgdGhlcmUgbXVzdCBhZGQgYSBob29rLFxuJiM0MztcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqcGFyc2Vfc3lzdGVtX2luZm8pKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pO1xuJiM0MztcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XG4mIzQzO1x0Y29uc3QgY2hhciAqKCptY3VfdHlwZV9zdHIpKHVuc2lnbmVkIGludCBtY3VfdHlwZSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHR1MTYgZGV2aWNlX2lkO1xuJiM0MztcdHUzMiBtYXhfbVdfcGVyX3BvcnQ7XG4mIzQzO1x0ZW51bSBydHBzZV9tY3VfY21kIHB3X3NldF9jbWQ7XHQvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovXG4mIzQzO1x0dTMyIHB3X3NldF9sc2JfbVc7XHRcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xuJiM0MztcdHUzMiBwd19yZWFkX2xzYl9tVztcdFx0LyogTFNCIG9mIGV4dF9jb25maWcubWF4X3Bvd2VyIHJlYWQtYmFjaywgaW4gbVcgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM4Yl9pbmZvID0ge1xuJiM0MztcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLFxuJiM0MztcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbiYjNDM7XHQubmFtZSA9IFwmIzM0O1JUTDgyMzhCXCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0ge1xuJiM0MztcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzksXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOVwmIzM0OyxcbiYjNDM7XHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4mIzQzO1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDQwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5Y19pbmZvID0ge1xuJiM0MztcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDLFxuJiM0MztcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcbiYjNDM7XHQubmFtZSA9IFwmIzM0O1JUTDgyMzlDXCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gNDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTExX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7QkNNNTkxMTFcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0ge1xuJiM0MztcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxLFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXRcbiYjNDM7XHQgKiBhbmQgdGhlIEJDTSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kIChcdTAwM2M9NTFXKTtcbiYjNDM7XHQgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbiYjNDM7XHQubmFtZSA9IFwmIzM0O0JDTTU5MTIxXCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpO1xuJiM0MztcdG1zZy1cdTAwM2VvcGNvZGUgPSBvcGNvZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHU4IHN1bSA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4tLSlcbiYjNDM7XHRcdHN1bSAmIzQzOz0gKmJ1ZiYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIHN1bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZG9feGZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VjaGVja3N1bSA9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnBzZS1cdTAwM2VtdXRleCkge1xuJiM0MztcdFx0cmV0ID0gcHNlLVx1MDAzZXRyYW5zcG9ydC1cdTAwM2VzZW5kKHBzZSwgcmVxKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBNQ1UgbmVlZHMgYSBmaXhlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHJlY2VpdmluZyBhIHJlcXVlc3RcbiYjNDM7XHRcdCAqIGFuZCBoYXZpbmcgdGhlIHJlc3BvbnNlIHJlYWR5LCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgYnl0ZXMgZ2V0IHRvXG4mIzQzO1x0XHQgKiB1cy4gUGFjZSB0aGUgdHJhbnNhY3Rpb24gaGVyZSBzbyBlYWNoIHRyYW5zcG9ydCBjYW4ga2VlcCBpdHMgcmVjdlxuJiM0MztcdFx0ICogcGF0aCBzaW1wbGU6IGEgc2luZ2xlIGJvdW5kZWQgd2FpdCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgcmV0cnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1zbGVlcChSVFBTRV9NQ1VfUkVTUE9OU0VfTVMpO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChyZXNwLCAwLCBzaXplb2YoKnJlc3ApKTtcbiYjNDM7XHRcdHJldCA9IHBzZS1cdTAwM2V0cmFuc3BvcnQtXHUwMDNlcmVjdihwc2UsIHJlcSwgcmVzcCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFeHBsaWNpdCBNQ1UgZXJyb3Igb3Bjb2RlcyAob2JzZXJ2ZWQgb24gdGhlIEJDTSBkaWFsZWN0OyBoYXJtbGVzc1xuJiM0MztcdCAqIHRvIGNoZWNrIGZvciBSVEwgdG9vKS4gQ2F0Y2ggdGhlc2UgYmVmb3JlIHRoZSBnZW5lcmljIG9wY29kZS9DUkNcbiYjNDM7XHQgKiBtaXNtYXRjaCBwYXRoIHNvIGNhbGxlcnMgc2VlIGEgbWVhbmluZ2Z1bCBlcnJuby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKHJlc3AtXHUwMDNlb3Bjb2RlKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6XG4mIzQzO1x0XHRyZXR1cm4gLUVCQURFO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTpcbiYjNDM7XHRcdHJldHVybiAtRUJBRE1TRztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmVzcC1cdTAwM2VvcGNvZGUgIT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuJiM0MztcdCAgICByZXNwLVx1MDAzZXNlcV9udW0gIT0gcmVxLVx1MDAzZXNlcV9udW0gfHxcbiYjNDM7XHQgICAgcmVzcC1cdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4mIzQzO1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgcmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyZXNwLVx1MDAzZXBheWxvYWRbMF0gIT0gcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9jbWQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsIHU4IGFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuJiM0MztcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcbiYjNDM7XHRyZXEucGF5bG9hZFsxXSA9IGFyZztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocmVzcC5wYXlsb2FkWzBdICE9IHBvcnQgfHwgcmVzcC5wYXlsb2FkWzFdICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEdsb2JhbCBvcGVyYXRpb25zICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvKHJlc3AucGF5bG9hZCwgaW5mbyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgKmNvbmZpZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2V1dmxvID0gcmVzcC5wYXlsb2FkWzBdO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZW51bV9vZl9wc2VzID0gcmVzcC5wYXlsb2FkWzZdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMxID0gcmVzcC5wYXlsb2FkWzFdO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMzID0gcmVzcC5wYXlsb2FkWzNdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtZWFzdXJlbWVudC1cdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xuJiM0MztcdG1lYXN1cmVtZW50LVx1MDAzZWN1cnJlbnRfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFszXSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNldGVtcGVyYXR1cmVfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs1XSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZWVuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VtYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXByaW9yaXR5ID0gcmVzcC5wYXlsb2FkWzRdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUFNFIGNvbnRyb2xsZXIgb3BzICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0YWRtaW5fc3RhdGUtXHUwMDNlYzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDpcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfU0VBUkNISU5HO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19URVNUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVEVTVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVU5LTk9XTjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhXG4mIzQzO1x0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XG4mIzQzO1x0ICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXNcbiYjNDM7XHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlc1xuJiM0MztcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuJiM0MztcdFx0cmV0dXJuIHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MoXHUwMDI2c3RhdHVzKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiAxMDBtVyBwZXIgTFNCICovXG4mIzQzO1x0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiB1VjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFx1MDAyNm1lYXN1cmVtZW50KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogNjQuNDVtViBwZXIgTFNCICovXG4mIzQzO1x0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsIFx1MDAyNmNvbmZpZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVx1MDAzZWNoaXAtXHUwMDNlcHdfcmVhZF9sc2JfbVc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqdHlwZV9vcGMsICp2YWxfb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLVx1MDAzZWNoaXA7XG4mIzQzO1x0dTggcHJnX3ZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobWF4X21XIFx1MDAzYyAwIHx8IG1heF9tVyBcdTAwM2UgY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0dHlwZV9vcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXTtcbiYjNDM7XHR2YWxfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW2NoaXAtXHUwMDNlcHdfc2V0X2NtZF07XG4mIzQzO1x0LyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqL1xuJiM0MztcdGlmICghdHlwZV9vcGMtXHUwMDNldmFsaWQgfHwgIXZhbF9vcGMtXHUwMDNldmFsaWQgfHwgIWNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcbiYjNDM7XHQgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW5cbiYjNDM7XHQgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0XG4mIzQzO1x0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtXHUwMDNlb3AsIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLVx1MDAzZW9wLCBwcmdfdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlKTtcbiYjNDM7XHRpZiAoIXJhbmdlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJhbmdlWzBdLm1pbiA9IDA7XG4mIzQzO1x0cmFuZ2VbMF0ubWF4ID0gcHNlLVx1MDAzZWNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0O1xuJiM0MztcbiYjNDM7XHRvdXQtXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbmZpZy5wcmlvcml0eTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1xuJiM0MztcdGlmIChwcmlvIFx1MDAzZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy1cdTAwM2VvcCwgcHJpbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfb3BzIHJ0cHNlX21jdV9vcHMgPSB7XG4mIzQzO1x0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcbiYjNDM7XHQucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsXG4mIzQzO1x0LnBpX2dldF9wd19jbGFzcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyxcbiYjNDM7XHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXG4mIzQzO1x0LnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSxcbiYjNDM7XHQucGlfZGlzYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUsXG4mIzQzO1x0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXG4mIzQzO1x0LnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCxcbiYjNDM7XHQucGlfc2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0LFxuJiM0MztcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcbiYjNDM7XHQucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyxcbiYjNDM7XHQucGlfc2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2Rpc2NvdmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgZXh0X2NvbmZpZztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXG4mIzQzO1x0ICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhXG4mIzQzO1x0ICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhXG4mIzQzO1x0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUyk7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FVElNRURPVVQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5YSU8gXHUwMDI2XHUwMDI2IHJldCAhPSAtRVJFTU9URUlPIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVCQURNU0cgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUJBREUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0bXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTtcbiYjNDM7XHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBpbmZvXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpbmZvLVx1MDAzZWRldmljZV9pZCkge1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOGJfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxuJiM0MztcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM5X2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzljX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTExX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTIxX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCwgXCYjMzQ7dW5rbm93biBQU0UgaWQgMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZGV2aWNlX2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VtYXhfcG9ydHMgfHwgaW5mby1cdTAwM2VtYXhfcG9ydHMgXHUwMDNlIFJUUFNFX01DVV9NQVhfUE9SVFMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7TUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XFxuXCYjMzQ7LCBpbmZvLVx1MDAzZW1heF9wb3J0cyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsIFx1MDAyNmV4dF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm8ocHNlLVx1MDAzZWRldiwgXCYjMzQ7JXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0IHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cihpbmZvLVx1MDAzZW1jdV90eXBlKSwgcHNlLVx1MDAzZWNoaXAtXHUwMDNlbmFtZSxcbiYjNDM7XHRcdCBpbmZvLVx1MDAzZWRldmljZV9pZCwgaW5mby1cdTAwM2VtYXhfcG9ydHMsIGV4dF9jb25maWcubnVtX29mX3BzZXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHJlZ3VsYXRvcl9kaXNhYmxlKGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShwc2UtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIW1hdGNoKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVOT0RFViwgXCYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXFxuXCYjMzQ7KTtcbiYjNDM7XHRwc2UtXHUwMDNlZGlhbGVjdCA9IG1hdGNoLVx1MDAzZWRpYWxlY3Q7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0XG4mIzQzO1x0ICogcHJvYmUgdGltZSwgcmF0aGVyIHRoYW4gTlVMTC1kZXJlZiYjMzk7aW5nIGxhdGVyIGZyb20gYSBmYXN0IHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwc2UtXHUwMDNlZGlhbGVjdCB8fFxuJiM0MztcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8gfHxcbiYjNDM7XHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MgfHxcbiYjNDM7XHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cilcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwc2UtXHUwMDNlcG9lX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChwc2UtXHUwMDNlZGV2LCBcJiMzNDtwb3dlclwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwc2UtXHUwMDNlcG9lX3N1cHBseSkpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCBQVFJfRVJSKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgUG9FIHN1cHBseVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLVx1MDAzZWRldiwgXCYjMzQ7ZW5hYmxlXCYjMzQ7LCBHUElPRF9PVVRfSElHSCk7XG4mIzQzO1x0aWYgKElTX0VSUihlbmFibGVfZ3BpbykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCBQVFJfRVJSKGVuYWJsZV9ncGlvKSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW9cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZGlzY292ZXIocHNlLCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwc2UtXHUwMDNlcG9lX3N1cHBseSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQb0Ugc3VwcGx5XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cdTAwM2VkZXYsIHJ0cHNlX21jdV9yZWd1bGF0b3JfZGlzYWJsZSwgcHNlLVx1MDAzZXBvZV9zdXBwbHkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkge1xuJiM0MztcdFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcbiYjNDM7XHRcdC8qIERpYWxlY3RzIHdpdGhvdXQgYSBnbG9iYWwtc3RhdGUgY29uY2VwdCAoZS5nLiBCQ00pIHJldHVyblxuJiM0MztcdFx0ICogLUVPUE5PVFNVUFA7IHRyZWF0IHRoYXQgYXMgXCYjMzQ7bm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkXCYjMzQ7LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQU0Ugc3lzdGVtXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICghcmV0KSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlLCBwc2UpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERlcGVuZGluZyBvbiB0aGUgTUNVIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gKHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudFxuJiM0MztcdCAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbiYjMzk7dCBrbm93biB3aGV0aGVyIHRoZSBQb0Ugc3Vic3lzdGVtIGlzIGFjdGl2ZSBvclxuJiM0MztcdCAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyXG4mIzQzO1x0ICogcG93ZXIgdG8gUERzIHdpdGhvdXQgYW55IGV4cGxpY2l0IGVuYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0LyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXJcbiYjNDM7XHQgKiBwaW5zIHRoZSB0cmFuc3BvcnQgbW9kdWxlIHRoYXQgb3ducyB0aGUgbGl2ZSBkZXZpY2UsIG5vdCB0aGUgY29yZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYub3BzICAgICAgPSBcdTAwMjZydHBzZV9tY3Vfb3BzO1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5kZXYgICAgICA9IHBzZS1cdTAwM2VkZXY7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2LnR5cGVzICAgID0gRVRIVE9PTF9QU0VfQzMzO1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzO1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFk7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcihwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlcGNkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aW5mby1cdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xuJiM0MztcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cGF5bG9hZFszXSk7XG4mIzQzO1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuJiM0MztcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuJiM0MztcdGluZm8tXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XG4mIzQzO1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdC8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi9cbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cdTAwM2VzdHMyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKG1jdV90eXBlKSB7XG4mIzQzO1x0Y2FzZSAweDAwOlx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkYzMTBcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkYyMzBcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAyOlx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkYzMDNcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAzOlx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkYxMDNcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDA0Olx0cmV0dXJuIFwmIzM0O0dpZ2FEZXZpY2UgR0QzMkUxMDNcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDEwOlx0cmV0dXJuIFwmIzM0O051dm90b24gTTA1MTZcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDExOlx0cmV0dXJuIFwmIzM0O051dm90b24gTTA1NjRcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDEyOlx0cmV0dXJuIFwmIzM0O051dm90b24gTlVDMDI5XCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6XHRyZXR1cm4gXCYjMzQ7dW5rbm93blwmIzM0OztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRpbmZvLVx1MDAzZW1heF9wb3J0cyA9IHBheWxvYWRbMV07XG4mIzQzO1x0LyogQkNNIGhhcyBubyBleHBsaWNpdCBzeXN0ZW1fZW5hYmxlIGJ5dGU7IHRoZSBjbG9zZXN0IGFuYWxvZyBpcyB0aGVcbiYjNDM7XHQgKiBcJiMzNDtyZW1vdGUgZW5hYmxlXCYjMzQ7IGJpdCBpbiB0aGUgc3lzdGVtLXN0YXR1cyBmbGFncyBhdCBwYXlsb2FkWzddLlxuJiM0MztcdCAqL1xuJiM0MztcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9ICEhKHBheWxvYWRbN10gXHUwMDI2IEJJVCgyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cGF5bG9hZFszXSk7XG4mIzQzO1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuJiM0MztcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuJiM0MztcdGluZm8tXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XG4mIzQzO1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdC8qIEJDTSBwdXRzIHRoZSBkZXRlY3RlZCBjbGFzcyBpbiBwYXlsb2FkWzNdICg9PSBzdHMzKSBkaXJlY3RseS5cbiYjNDM7XHQgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlXG4mIzQzO1x0ICogbm9pc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHN0YXR1cy1cdTAwM2VzdHMzIFx1MDAyNiAweDBmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobWN1X3R5cGUpIHtcbiYjNDM7XHRjYXNlIDB4MDA6XHRyZXR1cm4gXCYjMzQ7U1QgTWljcm8gU1QzMkYxMDBcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwmIzM0O051dm90b24gTTA1eHggTEFOXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMjpcdHJldHVybiBcJiMzNDtTVCBNaWNybyBTVEYwMzBDOFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDM6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDU4U0FOXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwNDpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE5VQzEyMlwmIzM0OztcbiYjNDM7XHRkZWZhdWx0Olx0cmV0dXJuIFwmIzM0O3Vua25vd25cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiA9IHtcbiYjNDM7XHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbyxcbiYjNDM7XHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLFxuJiM0MztcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cixcbiYjNDM7XHQub3Bjb2RlID0ge1xuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cdD0gUlRQU0VfTUNVX09QKDB4MDApLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDRhKSxcbiYjNDM7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDEyKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldXHQ9IFJUUFNFX01DVV9PUCgweDE1KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cdD0gUlRQU0VfTUNVX09QKDB4NDQpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQ4KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDQ5KSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0ge1xuJiM0MztcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvLFxuJiM0MztcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MsXG4mIzQzO1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLFxuJiM0MztcdC5vcGNvZGUgPSB7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4MjApLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxuJiM0MztcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdXHQ9IFJUUFNFX01DVV9PUCgweDE2KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4MjEpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXHQ9IFJUUFNFX01DVV9PUCgweDMwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyNSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHgyNiksXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhID0ge1xuJiM0MztcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjFfZGF0YSk7XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YSA9IHtcbiYjNDM7XHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2RhdGEpO1xuJiM0MztcbiYjNDM7LyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqL1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgPSB7XG4mIzQzO1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxuJiM0MztcdC5uYXRpdmVfaTJjID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKGNvcmUpXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NzE3Njg0YzBjYmQ5MFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xuQEAgLTAsMCAmIzQzOzEsMTcxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvXG4mIzQzOyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXG4mIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbiYjNDM7ICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcdChSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUylcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdC8qIFNlbmQgb3Bjb2RlIGFzIFNNQnVzIGNvbW1hbmQgYnl0ZTsgcmVtYWluaW5nIDExIGJ5dGVzIGFzIGJsb2NrIGRhdGEgKi9cbiYjNDM7XHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSAmIzQzOyAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1x0aW50IHRyaWVzLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRyaWVzIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUNVIG5lZWRzIDB4MDAgYXMgY29tbWFuZCBieXRlIGZvciByZWFkICovXG4mIzQzO1x0XHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAodTggKilyZXNwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSBcdTAwMjZcdTAwMjYgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdHZvaWQgKmJ1ZjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBpMmNfbWFzdGVyX3NlbmQoKSBtYXkgRE1BLCBzbyB0aGUgYnVmZmVyIG11c3Qgbm90IGJlIG9uIHRoZSBzdGFjay4gKi9cbiYjNDM7XHRidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1x0a2ZyZWUoYnVmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGludCB0cmllcywgcmV0O1xuJiM0MztcdHU4ICpidWY7XG4mIzQzO1xuJiM0MztcdC8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqL1xuJiM0MztcdGJ1ZiA9IGttYWxsb2MoUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0cmllcyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUpIHtcbiYjNDM7XHRcdFx0bWVtY3B5KHJlc3AsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRcdFx0aWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IC1FVElNRURPVVQ7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShidWYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzID0ge1xuJiM0MztcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcbiYjNDM7XHRib29sIHVzZV9uYXRpdmU7XG4mIzQzO1xuJiM0MztcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4mIzQzO1x0aWYgKCFtYXRjaClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgXCYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZyYW1pbmcgKHJhdyBJMkMgdnMgU01CdXMpIGlzIGNhcnJpZWQgYnkgdGhlIG1hdGNoIGRhdGEuICovXG4mIzQzO1x0dXNlX25hdGl2ZSA9IG1hdGNoLVx1MDAzZW5hdGl2ZV9pMmM7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VfbmF0aXZlKSB7XG4mIzQzO1x0XHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cdTAwM2VhZGFwdGVyLCBJMkNfRlVOQ19JMkMpKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuJiM0MztcdFx0XHRcdFwmIzM0O3BsYWluLUkyQyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgSTJDLWNhcGFibGUgYWRhcHRlclxcblwmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8XG4mIzQzO1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcbiYjNDM7XHRcdFx0XHRcJiMzNDtTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHNlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwc2UpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBzZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwc2UtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuJiM0MztcdHBzZS1cdTAwM2V0cmFuc3BvcnQgPSB1c2VfbmF0aXZlID8gXHUwMDI2cnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzIDogXHUwMDI2cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1wmIzM0OywgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfZ2VuMV9kYXRhIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4yX2RhdGEgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4yX2kyY19kYXRhIH0sXG4mIzQzO1x0eyAvKiBzZW50aW5lbCAqLyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0cHNlX21jdV9pMmNfZHJpdmVyID0ge1xuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O3JlYWx0ZWstcHNlLW1jdS1pMmNcJiMzNDssXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGVcdD0gcnRwc2VfbWN1X2kyY19vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0MztcdC5wcm9iZVx0XHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChJMkMgdHJhbnNwb3J0KVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MWNhZGI1NTY5YWI0NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcbkBAIC0wLDAgJiM0MzsxLDE1NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXJkZXYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtyZWFsdGVrLXBzZS1tY3UuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFRcdDE5MjAwXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVFx0bXNlY3NfdG9famlmZmllcygxMDApXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVFx0bXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TKVxuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV91YXJ0IHtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlO1xuJiM0MztcdHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXY7XG4mIzQzO1x0c3RydWN0IGNvbXBsZXRpb24gcnhfZG9uZTtcbiYjNDM7XHRzcGlubG9ja190IHJ4X2xvY2s7XHRcdC8qIHByb3RlY3RzIHJ4X2J1ZiBhbmQgcnhfbGVuICovXG4mIzQzO1x0c2l6ZV90IHJ4X2xlbjtcbiYjNDM7XHR1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlblxuJiM0MzsgKiB0aGUgbmV4dCBfc2VuZCByZS1mcmFtZXMgZnJvbSByeF9sZW4gMC4gUmVzeW5jIHdvcmtzIGJ5IHJldHVybmluZyBjb3VudFxuJiM0MzsgKiAobm90IHRha2UpLCBkcm9wcGluZyBhbnkgb3ZlcmZsb3cgc28gc2VyZGV2IGtlZXBzIG5vIGxlZnRvdmVyIHRvIGJsZWVkXG4mIzQzOyAqIGludG8gdGhlIG5leHQgZnJhbWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc2l6ZV90IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpO1xuJiM0MztcdHNpemVfdCB0YWtlO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbiYjNDM7XHRcdHRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtXHUwMDNlcnhfYnVmKSAtIGN0eC1cdTAwM2VyeF9sZW4pO1xuJiM0MztcdFx0aWYgKHRha2UpIHtcbiYjNDM7XHRcdFx0bWVtY3B5KGN0eC1cdTAwM2VyeF9idWYgJiM0MzsgY3R4LVx1MDAzZXJ4X2xlbiwgYnVmLCB0YWtlKTtcbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZXJ4X2xlbiAmIzQzOz0gdGFrZTtcbiYjNDM7XHRcdFx0aWYgKGN0eC1cdTAwM2VyeF9sZW4gPT0gc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpKVxuJiM0MztcdFx0XHRcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGNvbnN1bWUgYWxsIHRvIGF2b2lkIGRlc3luYy9taXNhbGlnbm1lbnQgKi9cbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgcnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyA9IHtcbiYjNDM7XHQucmVjZWl2ZV9idWYgPSBydHBzZV9tY3VfdWFydF9yZWNlaXZlLFxuJiM0MztcdC53cml0ZV93YWtldXAgPSBzZXJkZXZfZGV2aWNlX3dyaXRlX3dha2V1cCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcbiYjNDM7XHRpbnQgd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0LyogY2xlYXIgYW55IGxlZnRvdmVyIHJ4IHN0YXRlIGJlZm9yZSB0cmFuc21pdHRpbmcgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbiYjNDM7XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VyeF9sZW4gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d3JpdHRlbiA9IHNlcmRldl9kZXZpY2Vfd3JpdGUoY3R4LVx1MDAzZXNlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksXG4mIzQzO1x0XHRcdFx0ICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7XG4mIzQzO1x0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gd3JpdHRlbjtcbiYjNDM7XHRpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUsIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVQpKVxuJiM0MztcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0aWYgKGN0eC1cdTAwM2VyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdFx0bWVtY3B5KHJlc3AsIGN0eC1cdTAwM2VyeF9idWYsIHNpemVvZigqcmVzcCkpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzID0ge1xuJiM0MztcdC5zZW5kID0gcnRwc2VfbWN1X3VhcnRfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV91YXJ0X3JlY3YsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc3BlZWQgPSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQ7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2c2VyZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRjdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VzZXJkZXYgPSBzZXJkZXY7XG4mIzQzO1x0Y3R4LVx1MDAzZXBzZS5kZXYgPSBkZXY7XG4mIzQzO1x0Y3R4LVx1MDAzZXBzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuJiM0MztcdGN0eC1cdTAwM2Vwc2UudHJhbnNwb3J0ID0gXHUwMDI2cnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcztcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsIFx1MDAyNnJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gb3BlbiBzZXJkZXZcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCBcJiMzNDtjdXJyZW50LXNwZWVkXCYjMzQ7LCBcdTAwMjZzcGVlZCk7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7XG4mIzQzO1x0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpO1xuJiM0MztcdHNlcmRldl9kZXZpY2Vfc2V0X3Bhcml0eShzZXJkZXYsIFNFUkRFVl9QQVJJVFlfTk9ORSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXHUwMDI2Y3R4LVx1MDAzZXBzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4xXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjJcJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi8gfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHtcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtyZWFsdGVrLXBzZS1tY3UtdWFydFwmIzM0OyxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHJ0cHNlX21jdV91YXJ0X29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfc2VyZGV2X2RldmljZV9kcml2ZXIocnRwc2VfbWN1X3VhcnRfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOWE2ZGEyYzhmMzdkOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICYjNDM7MSw5MCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0hcbiYjNDM7I2RlZmluZSBfUkVBTFRFS19QU0VfTUNVX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuJiM0MzsgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZVxuJiM0MzsgKiB1bmRlcmx5aW5nIHRyYW5zcG9ydDogdGhlIGNvcmUgcGFjZXMgdHJhbnNhY3Rpb25zIGJ5IFJUUFNFX01DVV9SRVNQT05TRV9NU1xuJiM0MzsgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4mIzQzOyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXNcbiYjNDM7ICogbmVlZGluZyB1cCB0byB+MXMgdG8gcHJvZHVjZSBhIHJlcGx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcdFx0XHQyNVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVNcdFx0MTAwMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZVxuJiM0MzsgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4mIzQzOyAqIGFuc3dlciBvbiB0aGUgYnVzIHlldDsgZ2l2ZSBpdCBhIGJvdW5kZWQgd2luZG93IHRvIGNvbWUgdXAgYmVmb3JlXG4mIzQzOyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TXHRcdDMwMDBcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NU1x0XHRcdDEwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTVNHX1NJWkVcdFx0XHQxMlxuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tc2cge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCBzZXFfbnVtO1xuJiM0MztcdHU4IHBheWxvYWRbOV07XG4mIzQzO1x0dTggY2hlY2tzdW07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuXG4mIzQzOyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEVcdFx0MHhmZFx0LyogLUVCQURFICAgKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXHRcdDB4ZmVcdC8qIC1FQkFETVNHICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFlcdFx0MHhmZlx0LyogLUVBR0FJTiAgKi9cbiYjNDM7XG4mIzQzOy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlc3AtXHUwMDNlb3Bjb2RlID09IHJlcS1cdTAwM2VvcGNvZGUgfHxcbiYjNDM7XHQgICAgICAgcmVzcC1cdTAwM2VvcGNvZGUgPT0gUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFIHx8XG4mIzQzO1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0O1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jdHJsO1xuJiM0MztcbiYjNDM7LyogUGVyLWNvbXBhdGlibGUgbWF0Y2ggZGF0YSAodGhlIG9mX21hdGNoIC5kYXRhKS4gKi9cbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7XG4mIzQzO1x0Ym9vbCBuYXRpdmVfaTJjO1x0LyogcmF3LUkyQyBmcmFtaW5nICh2cyBTTUJ1cyk7IEkyQyB0cmFuc3BvcnQgb25seSAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHtcbiYjNDM7XHRpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7XG4mIzQzO1x0aW50ICgqcmVjdikoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jdHJsIHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4mIzQzO1x0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHNlcmlhbGl6ZXMgTUNVIHJlcXVlc3QvcmVzcG9uc2UgdHJhbnNhY3Rpb25zICovXG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyAqdHJhbnNwb3J0O1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICpwb2Vfc3VwcGx5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7XG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGE7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2RvX3hmZXImIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfc21idXNfcmVjdiYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGY0OGY0YmZjZGZhMzBlNTI3ZGVmNDRkYWEyZmZhOWQ3YWM5ZGYxNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDE2OjQyOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzMzMzA2MTkzZGI1N2UKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbApAQCAtMCwwICYjNDM7MSwxNzYgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFJlYWx0ZWsgUFNFIE1DVQomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkKJiM0MzsgIGhhcmR3YXJlIG9uIGEgcmFuZ2Ugb2YgbWFuYWdlZCBQb0Ugc3dpdGNoZXMuIFRoZSBob3N0IENQVSB0YWxrcyBvbmx5IHRvCiYjNDM7ICB0aGlzIE1DVSAtIG92ZXIgSTJDL1NNQnVzIG9yIFVBUlQgLSB1c2luZyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7CiYjNDM7ICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkCiYjNDM7ICBkaXJlY3RseS4gRm9yIGV4YW1wbGUsIG9uIHRoZSBaeXhlbCBHUzE5MDAtMTBIUCB0aGUgU29DIHJlYWNoZXMgdGhlIE1DVQomIzQzOyAgb3ZlciBVQVJULCBhbmQgdGhlIE1DVSBtYW5hZ2VzIHRoZSBvbi1ib2FyZCBQU0UgY2hpcC4KJiM0MzsKJiM0MzsgIFRoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIE1DVSB0b2dldGhlciB3aXRoIGl0cyBSZWFsdGVrIGZpcm13YXJlOiB0aGUKJiM0MzsgIGZpcm13YXJlIGFuZCBpdHMgaG9zdCBwcm90b2NvbCwgd2hpY2ggYXJlIHN0YWJsZSBhY3Jvc3MgYm9hcmRzLiBUaGUKJiM0MzsgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGUKJiM0MzsgIFBTRSBzaWxpY29uIGJlaGluZCB0aGUgTUNVIChSZWFsdGVrIFJUTDgyM3gvUlRMODIzOSogb3IgQnJvYWRjb20KJiM0MzsgIEJDTTU5eHh4KSBpcyByZXBvcnRlZCBieSB0aGUgTUNVIGFuZCBkZXRlY3RlZCBhdCBydW50aW1lIC0gbmVpdGhlciBpcwomIzQzOyAgbmFtZWQgaGVyZS4KJiM0MzsKJiM0MzsgIFR3byBwcm90b2NvbCBnZW5lcmF0aW9ucyBleGlzdCwgYm90aCBSZWFsdGVrJiMzOTtzOgomIzQzOyAgICBnZW4xICBvbGRlciBib2FyZHMsIHdoZXJlIHRoZSBNQ1UgZnJvbnRzIEJyb2FkY29tIFBTRSBzaWxpY29uCiYjNDM7ICAgIGdlbjIgIHRoZSBhbHRlcmVkIHByb3RvY29sIHVzZWQgd2l0aCBSZWFsdGVrJiMzOTtzIG93biBQU0Ugc2lsaWNvbgomIzQzOwomIzQzOyAgT24gYW4gSTJDIGF0dGFjaG1lbnQgdGhlIGZyYW1pbmcgdGhlIE1DVSBmaXJtd2FyZSBleHBlY3RzIGlzIHBhcnQgb2YgdGhlCiYjNDM7ICBjb21wYXRpYmxlOiAmIzM5Oy1zbWJ1cyYjMzk7IChyZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlIGFuZCBhIHJlcGVhdGVkCiYjNDM7ICBzdGFydCkgb3IgJiMzOTstaTJjJiMzOTsgKGJhcmUgYmxvY2sgd3JpdGVzIGFuZCByZWFkcykuIEEgVUFSVCBhdHRhY2htZW50IGNhcnJpZXMKJiM0MzsgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJiMzOTtzZXJpYWwmIzM5OyBub2RlLgomIzQzOwomIzQzOyAgRWFjaCBib2FyZCBhZGRpdGlvbmFsbHkgY2FycmllcyBhIGRldmljZS1zcGVjaWZpYyBjb21wYXRpYmxlIHRoYXQgZmFsbHMKJiM0MzsgIGJhY2sgdG8gb25lIG9mIHRoZSBwcm90b2NvbCBjb21wYXRpYmxlcyBhYm92ZS4gRHJpdmVycyBiaW5kIG9uIHRoZQomIzQzOyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kCiYjNDM7ICByZXNlcnZlcyBhIHBsYWNlIGZvciBhIGZ1dHVyZSBwZXItYm9hcmQgcXVpcmsgd2l0aG91dCBoYXZpbmcgdG8gcmV0cm9maXQKJiM0MzsgIGRldmljZSB0cmVlcyBhbHJlYWR5IGluIHRoZSBmaWVsZC4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgb25lT2Y6CiYjNDM7ICAgICAgIyBVQVJUCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1hMS1wc2UKJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjEKJiM0MzsKJiM0MzsgICAgICAjIEkyQywgU01CdXMgZnJhbWluZwomIzQzOyAgICAgIC0gaXRlbXM6CiYjNDM7ICAgICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTIwLTI0aHAtdjItcHNlCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzCiYjNDM7CiYjNDM7ICAgICAgIyBVQVJUCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1iMS1wc2UKJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwseG1nMTkxNS0xMGVwLXBzZQomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMgomIzQzOwomIzQzOyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCx4czE5MzAtMTJocC1wc2UKJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXMKJiM0MzsKJiM0MzsgICAgICAjIEkyQywgcmF3IGZyYW1pbmcKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIGxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZQomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHBvd2VyLXN1cHBseToKJiM0MzsgICAgZGVzY3JpcHRpb246IFJlZ3VsYXRvciBzdXBwbHlpbmcgdGhlIFBvRSBwb3dlciByYWlsLgomIzQzOwomIzQzOyAgZW5hYmxlLWdwaW9zOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjCiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NlcmlhbC9zZXJpYWwtcGVyaXBoZXJhbC1wcm9wcy55YW1sIwomIzQzOyAgIyBBICYjMzk7LXNtYnVzJiMzOTsvJiMzOTstaTJjJiMzOTsgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICYjMzk7cmVnJiMzOTsgYW5kCiYjNDM7ICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlQKJiM0MzsgICMgYXR0YWNobWVudDogbm8gJiMzOTtyZWcmIzM5OywgdGhlIHRyYW5zcG9ydCBjb21lcyBmcm9tIHRoZSBwYXJlbnQgc2VyaWFsIG5vZGUuCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1cwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gcmVnCiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlCiYjNDM7ICAgICAgICBtYXgtc3BlZWQ6IGZhbHNlCiYjNDM7ICAgIGVsc2U6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHJlZzogZmFsc2UKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudAomIzQzOyAgLSB8CiYjNDM7ICAgIGkyYyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt6eXhlbCx4czE5MzAtMTJocC1wc2UmIzM0OywgJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cyYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDIwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBwc2UtcGlzIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50CiYjNDM7ICAtIHwKJiM0MzsgICAgaTJjIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2xpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZSYjMzQ7LCAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyYyYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDIwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBwc2UtcGlzIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgIyBVQVJUIGF0dGFjaG1lbnQKJiM0MzsgIC0gfAomIzQzOyAgICBzZXJpYWwgewomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt6eXhlbCxnczE5MDAtMTBocC1hMS1wc2UmIzM0OywgJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMSYjMzQ7OwomIzQzOyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSAmbHQ7MTkyMDAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBzZS1waXMgewomIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDUyZjFhNTVlY2E5OWJmLi4zYjIxZTQ2YmU2OGExZiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIyNzE2LDYgJiM0MzsyMjcxNiwxMyBAQCBTOglNYWludGFpbmVkCiBGOglpbmNsdWRlL3NvdW5kL3J0Ki5oCiBGOglzb3VuZC9zb2MvY29kZWNzL3J0KgogCiYjNDM7UkVBTFRFSyBQU0UgTUNVIERSSVZFUgomIzQzO006CUpvbmFzIEplbG9uZWsgJmx0O2plbG9uZWsuam9uYXNAZ21haWwuY29tJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KgomIzQzOwogUkVBTFRFSyBPVFRPIFdBVENIRE9HCiBNOglTYW5kZXIgVmFuaGV1bGUgJmx0O3NhbmRlckBzdmFuaGV1bGUubmV0Jmd0OwogTDoJbGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnCmluZGV4IDdlZjI5NjU3ZWU1ZGQxLi5hMGYyYWU2NjhjNjdjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcKQEAgLTEzLDYgJiM0MzsxMywzNCBAQCBtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSCiAKIGlmIFBTRV9DT05UUk9MTEVSCiAKJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVCiYjNDM7CXRyaXN0YXRlCiYjNDM7CWhlbHAKJiM0MzsJICBTaGFyZWQgY29yZSBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIuIFRoaXMgaXMgc2VsZWN0ZWQKJiM0MzsJICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB0cmFuc3BvcnQgb3B0aW9ucyBiZWxvdy4KJiM0MzsKJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVX0kyQwomIzQzOwl0cmlzdGF0ZSAmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBJMkMKJiM0MzsJc2VsZWN0IFBTRV9SRUFMVEVLX01DVQomIzQzOwloZWxwCiYjNDM7CSAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0UKJiM0MzsJICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWQKJiM0MzsJICB2aWEgSTJDL1NNQnVzLiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsCiYjNDM7CSAgUFNFIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEKJiM0MzsJICBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmVhbHRlay1wc2UtbWN1LWkyYy4KJiM0MzsKJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlQKJiM0MzsJdHJpc3RhdGUgJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydCkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTCiYjNDM7CXNlbGVjdCBQU0VfUkVBTFRFS19NQ1UKJiM0MzsJaGVscAomIzQzOwkgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFCiYjNDM7CSAgaGFyZHdhcmUgb24gdmFyaW91cyBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMsIGF0dGFjaGVkCiYjNDM7CSAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFCiYjNDM7CSAgc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYQomIzQzOwkgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtdWFydC4KJiM0MzsKIGNvbmZpZyBQU0VfUkVHVUxBVE9SCiAJdHJpc3RhdGUgJiMzNDtSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXImIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQppbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsOSBAQAogCiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vCiAKJiM0MztvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWNvcmUubwomIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vCiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LXVhcnQubwogb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICYjNDM7PSBwc2VfcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAubwogb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMGE1YmI3ODQzNjBhNWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYwpAQCAtMCwwICYjNDM7MSw5OTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXMKJiM0MzsgKiBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMuIFRoZSBNQ1Ugc3BlYWtzIGEgMTItYnl0ZSBmaXhlZC1mcmFtZQomIzQzOyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlCiYjNDM7ICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLgomIzQzOyAqCiYjNDM7ICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGUKJiM0MzsgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yCiYjNDM7ICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVCiYjNDM7ICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbC4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3QKJiM0MzsgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLgomIzQzOyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmUKJiM0MzsgKiB0aGUgTUNVIGZyb250cyBhbmQgbWFuYWdlcyBCcm9hZGNvbSBQU0Ugc2lsaWNvbjsgR2VuMiBiZWluZyB1c2VkIHdpdGgKJiM0MzsgKiBSZWFsdGVrIFBTRSBzaWxpY29uLiBUaGUgdHdvIHNoYXJlIGZyYW1lIGZvcm1hdCBhbmQgYSBzdW0tbW9kLTI1NgomIzQzOyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzOwomIzQzOyAqIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuCiYjNDM7ICoKJiM0MzsgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3QKJiM0MzsgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sCiYjNDM7ICogZmFtaWx5LCBhbmQgJiMzNDtkdW1iIFBTRSYjMzQ7IG1vZGVzIHdoZXJlIG5vIGhvc3QgY29udHJvbCBpcyB3aXJlZCB1cCBhdCBhbGwuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1UKJiM0MzsgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlcwomIzQzOyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2CiYjNDM7ICogY2FsbGJhY2tzLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbnRhaW5lcl9vZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ncGlvL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ppZmZpZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3JlYWx0ZWstcHNlLW1jdS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIJCTB4MDEzOAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5CQkweDAwMzkKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMJCTB4MDEzOQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMQkJMHhlMTExCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxCQkweGUxMjEKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRAkJMHgwMAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORwkJMHgwMQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkcJCTB4MDIKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19URVNUCQkJMHgwMwkvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVAkJMHgwNAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUCQkweDA1CS8qIEdlbjEtb25seTsgcmVzZXJ2ZWQgb24gR2VuMiAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkcJCTB4MDYKJiM0MzsKJiM0MzsvKiBSVFBTRV9NQ1VfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSB2YWx1ZXMgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUgkweDAyCiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTUFYX1BPUlRTCQkJNDgKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWQkJMwomIzQzOwomIzQzO2VudW0gcnRwc2VfbWN1X2NtZCB7CiYjNDM7CVJUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURSwKJiM0MzsJUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sCiYjNDM7CVJUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUcsCiYjNDM7CiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9FTkFCTEUsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSwKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCwKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLAomIzQzOwomIzQzOwlSVFBTRV9NQ1VfTlVNX0NNRFMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSB7CiYjNDM7CXU4IG9wOwomIzQzOwlib29sIHZhbGlkOwomIzQzO307CiYjNDM7CiYjNDM7LyogU2hvcnRoYW5kIGZvciB0aGUgZGVzaWduYXRlZC1pbml0aWFsaXplciBlbnRyaWVzIGluIGRpYWxlY3Qgb3Bjb2RlIHRhYmxlcy4gKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUChvcGMpCXsgLm9wID0gKG9wYyksIC52YWxpZCA9IHRydWUgfQomIzQzOwomIzQzOy8qIFBhcnNlZCBNQ1UgcmVzcG9uc2Ugc3RydWN0dXJlcyAoZGVjb2RlZCBmcm9tIHJ0cHNlX21jdV9tc2cgcmVwbGllcykgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gewomIzQzOwl1OCBtYXhfcG9ydHM7CiYjNDM7CWJvb2wgc3lzdGVtX2VuYWJsZTsKJiM0MzsJdTE2IGRldmljZV9pZDsKJiM0MzsJdTggc3dfdmVyOwomIzQzOwl1OCBtY3VfdHlwZTsKJiM0MzsJdTggY29uZmlnX3N0YXR1czsKJiM0MzsJdTggZXh0X3ZlcjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7CiYjNDM7CXU4IHV2bG87CiYjNDM7CXU4IG92bG87CiYjNDM7CWJvb2wgcHJlYWxsb2NfZW5hYmxlOwomIzQzOwl1OCBudW1fb2ZfcHNlczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgewomIzQzOwl1OCBzdHMxOwomIzQzOwl1OCBzdHMyOwomIzQzOwl1OCBzdHMzOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IHsKJiM0MzsJdTE2IHZvbHRhZ2VfcmF3OwkvKiA2NC40NW1WL0xTQiAqLwomIzQzOwl1MTYgY3VycmVudF9yYXc7CS8qIDFtQS9MU0IgKi8KJiM0MzsJdTE2IHRlbXBlcmF0dXJlX3JhdzsJLyogVChtQykgPSAxMjUwICogKDIyMCAtIHJhdykgKi8KJiM0MzsJdTE2IHBvd2VyX3JhdzsJCS8qIDEwMG1XL0xTQiAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7CiYjNDM7CWJvb2wgZW5hYmxlOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgewomIzQzOwl1OCBtYXhfcG93ZXI7CiYjNDM7CXU4IHByaW9yaXR5OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgb3Bjb2RlW1JUUFNFX01DVV9OVU1fQ01EU107CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlc3BvbnNlIHBhcnNlcnMgZm9yIHRoZSBmaWVsZHMgdGhhdCBkaWZmZXIgYmV0d2VlbiBkaWFsZWN0czsgZWFjaAomIzQzOwkgKiBkaWFsZWN0IHN1cHBsaWVzIGl0cyBvd24uIE90aGVyIHJlc3BvbnNlcyBzaGFyZSBvbmUgbGF5b3V0IGFuZCBhcmUKJiM0MzsJICogZGVjb2RlZCBkaXJlY3RseSAtIGEgZGlhbGVjdCB0aGF0IGRpdmVyZ2VzIHRoZXJlIG11c3QgYWRkIGEgaG9vaywKJiM0MzsJICogYXMgYSBtaXNtYXRjaGVkIGxheW91dCBjYW5ub3QgYmUgZGV0ZWN0ZWQgKHRoZSBjaGVja3N1bSBzdGlsbCBwYXNzZXMpLgomIzQzOwkgKi8KJiM0MzsJdm9pZCAoKnBhcnNlX3N5c3RlbV9pbmZvKShjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKTsKJiM0MzsJaW50ICgqcGFyc2VfcG9ydF9jbGFzcykoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKTsKJiM0MzsJY29uc3QgY2hhciAqKCptY3VfdHlwZV9zdHIpKHVuc2lnbmVkIGludCBtY3VfdHlwZSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyB7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CXUxNiBkZXZpY2VfaWQ7CiYjNDM7CXUzMiBtYXhfbVdfcGVyX3BvcnQ7CiYjNDM7CWVudW0gcnRwc2VfbWN1X2NtZCBwd19zZXRfY21kOwkvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovCiYjNDM7CXUzMiBwd19zZXRfbHNiX21XOwkJLyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovCiYjNDM7CXUzMiBwd19yZWFkX2xzYl9tVzsJCS8qIExTQiBvZiBleHRfY29uZmlnLm1heF9wb3dlciByZWFkLWJhY2ssIGluIG1XICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOGJfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O1JUTDgyMzhCJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDIwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDIwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7CiYjNDM7CS5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzksCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O1JUTDgyMzkmIzM0OywKJiM0MzsJLnB3X3JlYWRfbHNiX21XID0gNDAwLAomIzQzOwkucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDQwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5Y19pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QywKJiM0MzsJLm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLAomIzQzOwkubmFtZSA9ICYjMzQ7UlRMODIzOUMmIzM0OywKJiM0MzsJLnB3X3JlYWRfbHNiX21XID0gNDAwLAomIzQzOwkucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDQwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTExMV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMSwKJiM0MzsJLm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLAomIzQzOwkubmFtZSA9ICYjMzQ7QkNNNTkxMTEmIzM0OywKJiM0MzsJLnB3X3JlYWRfbHNiX21XID0gMjAwLAomIzQzOwkucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsCiYjNDM7CS5wd19zZXRfbHNiX21XID0gMjAwLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7CiYjNDM7CS5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxLAomIzQzOwkvKgomIzQzOwkgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdAomIzQzOwkgKiBhbmQgdGhlIEJDTSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kICgmbHQ7PTUxVyk7CiYjNDM7CSAqIGNhcCBhdCB0aGUgMzBXIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBvZmZlcnMuCiYjNDM7CSAqLwomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtCQ001OTEyMSYjMzQ7LAomIzQzOwkucHdfcmVhZF9sc2JfbVcgPSAyMDAsCiYjNDM7CS5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSAyMDAsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHJ0cHNlX21jdV9jdHJsICp0b19ydHBzZV9tY3VfY3RybChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBjb250YWluZXJfb2YocGNkZXYsIHN0cnVjdCBydHBzZV9tY3VfY3RybCwgcGNkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfbXNnX2luaXQoc3RydWN0IHJ0cHNlX21jdV9tc2cgKm1zZywgdTggb3Bjb2RlKQomIzQzO3sKJiM0MzsJbWVtc2V0KG1zZywgMHhmZiwgc2l6ZW9mKCptc2cpKTsKJiM0MzsJbXNnLSZndDtvcGNvZGUgPSBvcGNvZGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXU4IHN1bSA9IDA7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4tLSkKJiM0MzsJCXN1bSAmIzQzOz0gKmJ1ZiYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiBzdW07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2RvX3hmZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7Y2hlY2tzdW0gPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVxLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKTsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3BzZS0mZ3Q7bXV0ZXgpIHsKJiM0MzsJCXJldCA9IHBzZS0mZ3Q7dHJhbnNwb3J0LSZndDtzZW5kKHBzZSwgcmVxKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgTUNVIG5lZWRzIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiByZWNlaXZpbmcgYSByZXF1ZXN0CiYjNDM7CQkgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0bwomIzQzOwkJICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3YKJiM0MzsJCSAqIHBhdGggc2ltcGxlOiBhIHNpbmdsZSBib3VuZGVkIHdhaXQgcmF0aGVyIHRoYW4gYSBnZW5lcmljIHJldHJ5LgomIzQzOwkJICovCiYjNDM7CQltc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTsKJiM0MzsKJiM0MzsJCW1lbXNldChyZXNwLCAwLCBzaXplb2YoKnJlc3ApKTsKJiM0MzsJCXJldCA9IHBzZS0mZ3Q7dHJhbnNwb3J0LSZndDtyZWN2KHBzZSwgcmVxLCByZXNwKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeHBsaWNpdCBNQ1UgZXJyb3Igb3Bjb2RlcyAob2JzZXJ2ZWQgb24gdGhlIEJDTSBkaWFsZWN0OyBoYXJtbGVzcwomIzQzOwkgKiB0byBjaGVjayBmb3IgUlRMIHRvbykuIENhdGNoIHRoZXNlIGJlZm9yZSB0aGUgZ2VuZXJpYyBvcGNvZGUvQ1JDCiYjNDM7CSAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLgomIzQzOwkgKi8KJiM0MzsJc3dpdGNoIChyZXNwLSZndDtvcGNvZGUpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6CiYjNDM7CQlyZXR1cm4gLUVCQURFOwomIzQzOwljYXNlIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU06CiYjNDM7CQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFk6CiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmVzcC0mZ3Q7b3Bjb2RlICE9IHJlcS0mZ3Q7b3Bjb2RlIHx8CiYjNDM7CSAgICByZXNwLSZndDtzZXFfbnVtICE9IHJlcS0mZ3Q7c2VxX251bSB8fAomIzQzOwkgICAgcmVzcC0mZ3Q7Y2hlY2tzdW0gIT0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpKQomIzQzOwkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9xdWVyeShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwKJiM0MzsJCQkJc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3Bjb2RlKTsKJiM0MzsJcmVxLnBheWxvYWRbMF0gPSBwb3J0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCByZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNwLSZndDtwYXlsb2FkWzBdICE9IHBvcnQpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfY21kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLCB1OCBhcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3Bjb2RlKTsKJiM0MzsJcmVxLnBheWxvYWRbMF0gPSBwb3J0OwomIzQzOwlyZXEucGF5bG9hZFsxXSA9IGFyZzsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogR2xvYmFsIG9wZXJhdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wYy0mZ3Q7b3ApOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9zeXN0ZW1faW5mbyhyZXNwLnBheWxvYWQsIGluZm8pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3BjLSZndDtvcCk7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgJmFtcDtyZXEsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwljb25maWctJmd0O3V2bG8gPSByZXNwLnBheWxvYWRbMF07CiYjNDM7CWNvbmZpZy0mZ3Q7b3ZsbyA9IHJlc3AucGF5bG9hZFs1XTsKJiM0MzsJY29uZmlnLSZndDtwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7CiYjNDM7CWNvbmZpZy0mZ3Q7bnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3BjLSZndDtvcCk7CiYjNDM7CXJlcS5wYXlsb2FkWzBdID0gZW5hYmxlID8gMHgxIDogMHgwOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIChyZXNwLnBheWxvYWRbMF0gPT0gMHgwKSA/IDAgOiAtRUlPOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQb3J0IG9wZXJhdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN0YXR1cy0mZ3Q7c3RzMSA9IHJlc3AucGF5bG9hZFsxXTsKJiM0MzsJc3RhdHVzLSZndDtzdHMyID0gcmVzcC5wYXlsb2FkWzJdOwomIzQzOwlzdGF0dXMtJmd0O3N0czMgPSByZXNwLnBheWxvYWRbM107CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCQkgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW1lYXN1cmVtZW50LSZndDt2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFsxXSk7CiYjNDM7CW1lYXN1cmVtZW50LSZndDtjdXJyZW50X3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFszXSk7CiYjNDM7CW1lYXN1cmVtZW50LSZndDt0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtyZXNwLnBheWxvYWRbNV0pOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7cG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cmVzcC5wYXlsb2FkWzddKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtJmd0O29wLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDtlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCQkgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy0mZ3Q7b3AsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwljb25maWctJmd0O21heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTsKJiM0MzsJY29uZmlnLSZndDtwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBwb3J0LCBvcGMtJmd0O29wLCBlbmFibGUgPyAweDEgOiAweDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQU0UgY29udHJvbGxlciBvcHMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIGNvbmZpZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhwc2UsIGlkLCAmYW1wO2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlhZG1pbl9zdGF0ZS0mZ3Q7YzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDoKJiM0MzsJCQkJCQkgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsCiYjNDM7CQkJCQlzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc3RhdHVzLnN0czEpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6CiYjNDM7CQlwd19zdGF0dXMtJmd0O2MzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRElTQUJMRUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOgomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgJmFtcDtzdGF0dXMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhCiYjNDM7CSAqIGZhdWx0L3Rlc3Qgc3RhdGUgKG9yIGEgY29kZSByZXNlcnZlZCBvbiB0aGUgY3VycmVudCBkaWFsZWN0KSBpdAomIzQzOwkgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpcwomIzQzOwkgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlcwomIzQzOwkgKiB2aWEgdGhlIHBvd2VyIHN0YXR1cy4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAoc3RhdHVzLnN0czEpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzoKJiM0MzsJCXJldHVybiBwc2UtJmd0O2RpYWxlY3QtJmd0O3BhcnNlX3BvcnRfY2xhc3MoJmFtcDtzdGF0dXMpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgJmFtcDttZWFzdXJlbWVudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiAxMDBtVyBwZXIgTFNCICovCiYjNDM7CXJldHVybiBtZWFzdXJlbWVudC5wb3dlcl9yYXcgKiAxMDBVOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50OwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MzIgdVY7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCAmYW1wO21lYXN1cmVtZW50KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIDY0LjQ1bVYgcGVyIExTQiAqLwomIzQzOwl1ViA9IG1lYXN1cmVtZW50LnZvbHRhZ2VfcmF3ICogNjQ0NTBVOwomIzQzOwlyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgJmFtcDtjb25maWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvbmZpZy5tYXhfcG93ZXIgKiBwc2UtJmd0O2NoaXAtJmd0O3B3X3JlYWRfbHNiX21XOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCBpbnQgbWF4X21XKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLSZndDtjaGlwOwomIzQzOwl1OCBwcmdfdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAobWF4X21XICZsdDsgMCB8fCBtYXhfbVcgJmd0OyBjaGlwLSZndDttYXhfbVdfcGVyX3BvcnQpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJdHlwZV9vcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07CiYjNDM7CXZhbF9vcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW2NoaXAtJmd0O3B3X3NldF9jbWRdOwomIzQzOwkvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovCiYjNDM7CWlmICghdHlwZV9vcGMtJmd0O3ZhbGlkIHx8ICF2YWxfb3BjLSZndDt2YWxpZCB8fCAhY2hpcC0mZ3Q7cHdfc2V0X2xzYl9tVykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3dpdGNoIHRoZSBwb3J0IHRvIHVzZXItZGVmaW5lZCBsaW1pdCBtb2RlIGZpcnN0LCB0aGVuIHByb2dyYW0gdGhlCiYjNDM7CSAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpbgomIzQzOwkgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0CiYjNDM7CSAqIHN1Y2Nlc3NmdWwgc2V0X3B3X2xpbWl0IGNhbGwgcmVjb3ZlcnMgaXQuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtJmd0O29wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHJnX3ZhbCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X21XIC8gY2hpcC0mZ3Q7cHdfc2V0X2xzYl9tVywgVThfTUFYKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLSZndDtvcCwgcHJnX3ZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJICAgICAgc3RydWN0IHBzZV9wd19saW1pdF9yYW5nZXMgKm91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX3B3X2xpbWl0X3JhbmdlICpyYW5nZTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJhbmdlWzBdLm1pbiA9IDA7CiYjNDM7CXJhbmdlWzBdLm1heCA9IHBzZS0mZ3Q7Y2hpcC0mZ3Q7bWF4X21XX3Blcl9wb3J0OwomIzQzOwomIzQzOwlvdXQtJmd0O2MzM19wd19saW1pdF9yYW5nZXMgPSByYW5nZTsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsICZhbXA7Y29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBjb25maWcucHJpb3JpdHk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsKJiM0MzsJaWYgKHByaW8gJmd0OyBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy0mZ3Q7b3AsIHByaW8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0gewomIzQzOwkucGlfZ2V0X2FkbWluX3N0YXRlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlLAomIzQzOwkucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsCiYjNDM7CS5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsCiYjNDM7CS5waV9nZXRfYWN0dWFsX3B3ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdywKJiM0MzsJLnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSwKJiM0MzsJLnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLAomIzQzOwkucGlfZ2V0X3ZvbHRhZ2UgPSBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSwKJiM0MzsJLnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCwKJiM0MzsJLnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCwKJiM0MzsJLnBpX2dldF9wd19saW1pdF9yYW5nZXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzLAomIzQzOwkucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbywKJiM0MzsJLnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIGV4dF9jb25maWc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgYm9vdGluZyBNQ1UgbWF5IHN0YXkgc2lsZW50ICgtRVRJTUVET1VUKSwgbm90IEFDSyBpdHMgYWRkcmVzcwomIzQzOwkgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGEKJiM0MzsJICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhCiYjNDM7CSAqIGJvdW5kZWQgd2luZG93OyBvdGhlciBlcnJvcnMgKGUuZy4gLUVPUE5PVFNVUFApIGFyZSBmYXRhbCBhbmQgZmFpbAomIzQzOwkgKiBpbW1lZGlhdGVseS4KJiM0MzsJICovCiYjNDM7CWRlYWRsaW5lID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVMpOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBydHBzZV9tY3VfZ2V0X2luZm8ocHNlLCBpbmZvKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVUSU1FRE9VVCAmYW1wOyZhbXA7IHJldCAhPSAtRU5YSU8gJmFtcDsmYW1wOyByZXQgIT0gLUVSRU1PVEVJTyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmV0ICE9IC1FQUdBSU4gJmFtcDsmYW1wOyByZXQgIT0gLUVCQURNU0cgJmFtcDsmYW1wOyByZXQgIT0gLUVCQURFKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJbXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChpbmZvLSZndDtkZXZpY2VfaWQpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM4Yl9pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM5X2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM5Y19pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMToKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7YmNtNTkxMTFfaW5mbzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6CiYjNDM7CQlwc2UtJmd0O2NoaXAgPSAmYW1wO2JjbTU5MTIxX2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRUlOVkFMLCAmIzM0O3Vua25vd24gUFNFIGlkIDB4JXhcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGluZm8tJmd0O2RldmljZV9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDttYXhfcG9ydHMgfHwgaW5mby0mZ3Q7bWF4X3BvcnRzICZndDsgUlRQU0VfTUNVX01BWF9QT1JUUykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgICYjMzQ7TUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XG4mIzM0OywgaW5mby0mZ3Q7bWF4X3BvcnRzKTsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgJmFtcDtleHRfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZGV2X2luZm8ocHNlLSZndDtkZXYsICYjMzQ7JXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXG4mIzM0OywKJiM0MzsJCSBwc2UtJmd0O2RpYWxlY3QtJmd0O21jdV90eXBlX3N0cihpbmZvLSZndDttY3VfdHlwZSksIHBzZS0mZ3Q7Y2hpcC0mZ3Q7bmFtZSwKJiM0MzsJCSBpbmZvLSZndDtkZXZpY2VfaWQsIGluZm8tJmd0O21heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXJlZ3VsYXRvcl9kaXNhYmxlKGRhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTsKJiM0MzsKJiM0MzsJcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoOwomIzQzOwlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9pbmZvIGluZm87CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtJmd0O2RldiwgJmFtcDtwc2UtJmd0O211dGV4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFtYXRjaCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRU5PREVWLCAmIzM0O21pc3NpbmcgbWF0Y2ggZGF0YVxuJiMzNDspOwomIzQzOwlwc2UtJmd0O2RpYWxlY3QgPSBtYXRjaC0mZ3Q7ZGlhbGVjdDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0CiYjNDM7CSAqIHByb2JlIHRpbWUsIHJhdGhlciB0aGFuIE5VTEwtZGVyZWYmIzM5O2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwc2UtJmd0O2RpYWxlY3QgfHwKJiM0MzsJICAgICFwc2UtJmd0O2RpYWxlY3QtJmd0O3BhcnNlX3N5c3RlbV9pbmZvIHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9wb3J0X2NsYXNzIHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDttY3VfdHlwZV9zdHIpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O2RpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxuJiMzNDspOwomIzQzOwomIzQzOwlwc2UtJmd0O3BvZV9zdXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQocHNlLSZndDtkZXYsICYjMzQ7cG93ZXImIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIocHNlLSZndDtwb2Vfc3VwcGx5KSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCBQVFJfRVJSKHBzZS0mZ3Q7cG9lX3N1cHBseSksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IFBvRSBzdXBwbHlcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtJmd0O2RldiwgJiMzNDtlbmFibGUmIzM0OywgR1BJT0RfT1VUX0hJR0gpOwomIzQzOwlpZiAoSVNfRVJSKGVuYWJsZV9ncGlvKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCBQVFJfRVJSKGVuYWJsZV9ncGlvKSwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW9cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2Rpc2NvdmVyKHBzZSwgJmFtcDtpbmZvKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHNlLSZndDtwb2Vfc3VwcGx5KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQb0Ugc3VwcGx5XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtJmd0O2RldiwgcnRwc2VfbWN1X3JlZ3VsYXRvcl9kaXNhYmxlLCBwc2UtJmd0O3BvZV9zdXBwbHkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLnN5c3RlbV9lbmFibGUpIHsKJiM0MzsJCXJldCA9IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgdHJ1ZSk7CiYjNDM7CQkvKiBEaWFsZWN0cyB3aXRob3V0IGEgZ2xvYmFsLXN0YXRlIGNvbmNlcHQgKGUuZy4gQkNNKSByZXR1cm4KJiM0MzsJCSAqIC1FT1BOT1RTVVBQOyB0cmVhdCB0aGF0IGFzICYjMzQ7bm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkJiMzNDsuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLSZndDtkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cbiYjMzQ7KTsKJiM0MzsJCWlmICghcmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEZXBlbmRpbmcgb24gdGhlIE1DVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnQKJiM0MzsJICogZm9yIGV2ZXJ5IGJvYXJkKSwgaXQgaXNuJiMzOTt0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yCiYjNDM7CSAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyCiYjNDM7CSAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwkvKiBwY2Rldi5vd25lciBpcyBzZXQgYnkgdGhlIHRyYW5zcG9ydCwgc28gdGhlIHJlZ2lzdGVyZWQgY29udHJvbGxlcgomIzQzOwkgKiBwaW5zIHRoZSB0cmFuc3BvcnQgbW9kdWxlIHRoYXQgb3ducyB0aGUgbGl2ZSBkZXZpY2UsIG5vdCB0aGUgY29yZS4KJiM0MzsJICovCiYjNDM7CXBzZS0mZ3Q7cGNkZXYub3BzICAgICAgPSAmYW1wO3J0cHNlX21jdV9vcHM7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYuZGV2ICAgICAgPSBwc2UtJmd0O2RldjsKJiM0MzsJcHNlLSZndDtwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMzsKJiM0MzsJcHNlLSZndDtwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzOwomIzQzOwlwc2UtJmd0O3BjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTsKJiM0MzsJcHNlLSZndDtwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQzsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocHNlLSZndDtkZXYsICZhbXA7cHNlLSZndDtwY2Rldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O21heF9wb3J0cyA9IHBheWxvYWRbMV07CiYjNDM7CWluZm8tJmd0O3N5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpOwomIzQzOwlpbmZvLSZndDtkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtwYXlsb2FkWzNdKTsKJiM0MzsJaW5mby0mZ3Q7c3dfdmVyID0gcGF5bG9hZFs1XTsKJiM0MzsJaW5mby0mZ3Q7bWN1X3R5cGUgPSBwYXlsb2FkWzZdOwomIzQzOwlpbmZvLSZndDtjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTsKJiM0MzsJaW5mby0mZ3Q7ZXh0X3ZlciA9IHBheWxvYWRbOF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpCiYjNDM7ewomIzQzOwkvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovCiYjNDM7CXJldHVybiBGSUVMRF9HRVQoR0VOTUFTSyg3LCA0KSwgc3RhdHVzLSZndDtzdHMyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKG1jdV90eXBlKSB7CiYjNDM7CWNhc2UgMHgwMDoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjMxMCYjMzQ7OwomIzQzOwljYXNlIDB4MDE6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkYyMzAmIzM0OzsKJiM0MzsJY2FzZSAweDAyOglyZXR1cm4gJiMzNDtHaWdhRGV2aWNlIEdEMzJGMzAzJiMzNDs7CiYjNDM7CWNhc2UgMHgwMzoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjEwMyYjMzQ7OwomIzQzOwljYXNlIDB4MDQ6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkUxMDMmIzM0OzsKJiM0MzsJY2FzZSAweDEwOglyZXR1cm4gJiMzNDtOdXZvdG9uIE0wNTE2JiMzNDs7CiYjNDM7CWNhc2UgMHgxMToJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDU2NCYjMzQ7OwomIzQzOwljYXNlIDB4MTI6CXJldHVybiAmIzM0O051dm90b24gTlVDMDI5JiMzNDs7CiYjNDM7CWRlZmF1bHQ6CXJldHVybiAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJaW5mby0mZ3Q7bWF4X3BvcnRzID0gcGF5bG9hZFsxXTsKJiM0MzsJLyogQkNNIGhhcyBubyBleHBsaWNpdCBzeXN0ZW1fZW5hYmxlIGJ5dGU7IHRoZSBjbG9zZXN0IGFuYWxvZyBpcyB0aGUKJiM0MzsJICogJiMzNDtyZW1vdGUgZW5hYmxlJiMzNDsgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uCiYjNDM7CSAqLwomIzQzOwlpbmZvLSZndDtzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSAmYW1wOyBCSVQoMikpOwomIzQzOwlpbmZvLSZndDtkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtwYXlsb2FkWzNdKTsKJiM0MzsJaW5mby0mZ3Q7c3dfdmVyID0gcGF5bG9hZFs1XTsKJiM0MzsJaW5mby0mZ3Q7bWN1X3R5cGUgPSBwYXlsb2FkWzZdOwomIzQzOwlpbmZvLSZndDtjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTsKJiM0MzsJaW5mby0mZ3Q7ZXh0X3ZlciA9IHBheWxvYWRbOF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjFfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpCiYjNDM7ewomIzQzOwkvKiBCQ00gcHV0cyB0aGUgZGV0ZWN0ZWQgY2xhc3MgaW4gcGF5bG9hZFszXSAoPT0gc3RzMykgZGlyZWN0bHkuCiYjNDM7CSAqIE1hc2sgdG8gdGhlIGxvdyBuaWJibGU7IGNsYXNzIGlzIDAuLjggYW5kIGFueSBoaWdoIGJpdHMgd291bGQgYmUKJiM0MzsJICogbm9pc2UuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gc3RhdHVzLSZndDtzdHMzICZhbXA7IDB4MGY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChtY3VfdHlwZSkgewomIzQzOwljYXNlIDB4MDA6CXJldHVybiAmIzM0O1NUIE1pY3JvIFNUMzJGMTAwJiMzNDs7CiYjNDM7CWNhc2UgMHgwMToJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDV4eCBMQU4mIzM0OzsKJiM0MzsJY2FzZSAweDAyOglyZXR1cm4gJiMzNDtTVCBNaWNybyBTVEYwMzBDOCYjMzQ7OwomIzQzOwljYXNlIDB4MDM6CXJldHVybiAmIzM0O051dm90b24gTTA1OFNBTiYjMzQ7OwomIzQzOwljYXNlIDB4MDQ6CXJldHVybiAmIzM0O051dm90b24gTlVDMTIyJiMzNDs7CiYjNDM7CWRlZmF1bHQ6CXJldHVybiAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4yID0gewomIzQzOwkucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbywKJiM0MzsJLnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcywKJiM0MzsJLm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjJfbWN1X3R5cGVfc3RyLAomIzQzOwkub3Bjb2RlID0gewomIzQzOwkJW1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV0JPSBSVFBTRV9NQ1VfT1AoMHgwMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dCQk9IFJUUFNFX01DVV9PUCgweDQwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXQkJPSBSVFBTRV9NQ1VfT1AoMHg0YSksCiYjNDM7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV0JCT0gUlRQU0VfTUNVX09QKDB4MDEpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF0JPSBSVFBTRV9NQ1VfT1AoMHgxMyksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldCT0gUlRQU0VfTUNVX09QKDB4MTUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXQkJPSBSVFBTRV9NQ1VfT1AoMHg0MiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU10JPSBSVFBTRV9NQ1VfT1AoMHg0NCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDQ4KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddCT0gUlRQU0VfTUNVX09QKDB4NDkpLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0gewomIzQzOwkucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbywKJiM0MzsJLnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2dlbjFfcGFyc2VfcG9ydF9jbGFzcywKJiM0MzsJLm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLAomIzQzOwkub3Bjb2RlID0gewomIzQzOwkJW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXQkJPSBSVFBTRV9NQ1VfT1AoMHgyMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR10JCT0gUlRQU0VfTUNVX09QKDB4MmIpLAomIzQzOwomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdCQk9IFJUUFNFX01DVV9PUCgweDAwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdCT0gUlRQU0VfTUNVX09QKDB4MTYpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldCT0gUlRQU0VfTUNVX09QKDB4MWEpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXQkJPSBSVFBTRV9NQ1VfT1AoMHgyMSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU10JPSBSVFBTRV9NQ1VfT1AoMHgzMCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDI1KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddCT0gUlRQU0VfTUNVX09QKDB4MjYpLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGEgPSB7CiYjNDM7CS5kaWFsZWN0ID0gJmFtcDtydHBzZV9tY3VfZGlhbGVjdF9nZW4xLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjFfZGF0YSk7CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2RhdGEgPSB7CiYjNDM7CS5kaWFsZWN0ID0gJmFtcDtydHBzZV9tY3VfZGlhbGVjdF9nZW4yLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfZGF0YSk7CiYjNDM7CiYjNDM7LyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqLwomIzQzO2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YSA9IHsKJiM0MzsJLmRpYWxlY3QgPSAmYW1wO3J0cHNlX21jdV9kaWFsZWN0X2dlbjIsCiYjNDM7CS5uYXRpdmVfaTJjID0gdHJ1ZSwKJiM0Mzt9OwomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhKTsKJiM0MzsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChjb3JlKSYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Sm9uYXMgSmVsb25layAmbHQ7amVsb25lay5qb25hc0BnbWFpbC5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU3MTc2ODRjMGNiZDkwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYwpAQCAtMCwwICYjNDM7MSwxNzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pMmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3JlYWx0ZWstcHNlLW1jdS5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvCiYjNDM7ICogdGhlIHJlc3BvbnNlIGlzIG5vcm1hbGx5IHJlYWR5IG9uIHRoZSB2ZXJ5IGZpcnN0IHJlYWQuIEZvciBjb21tYW5kcyB0aGUKJiM0MzsgKiBNQ1UgcHJvZHVjZXMgbW9yZSBzbG93bHksIGtlZXAgcG9sbGluZyBhdCB0aGUgdHlwaWNhbCByZXNwb25zZSBjYWRlbmNlCiYjNDM7ICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9JMkNfUkVUUllfTVMJUlRQU0VfTUNVX1JFU1BPTlNFX01TCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUwkoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUyAvIFJUUFNFX01DVV9JMkNfUkVUUllfTVMpCiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtJmd0O2Rldik7CiYjNDM7CiYjNDM7CS8qIFNlbmQgb3Bjb2RlIGFzIFNNQnVzIGNvbW1hbmQgYnl0ZTsgcmVtYWluaW5nIDExIGJ5dGVzIGFzIGJsb2NrIGRhdGEgKi8KJiM0MzsJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlcS0mZ3Q7b3Bjb2RlLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxLAomIzQzOwkJCQkJICAgICAgKHU4ICopcmVxICYjNDM7IDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkJICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLSZndDtkZXYpOwomIzQzOwlpbnQgdHJpZXMsIHJldDsKJiM0MzsKJiM0MzsJZm9yICh0cmllcyA9IDA7IHRyaWVzICZsdDsgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHRyaWVzICZndDsgMCkKJiM0MzsJCQltc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7CiYjNDM7CiYjNDM7CQkvKiBNQ1UgbmVlZHMgMHgwMCBhcyBjb21tYW5kIGJ5dGUgZm9yIHJlYWQgKi8KJiM0MzsJCXJldCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGNsaWVudCwgMHgwMCwKJiM0MzsJCQkJCQkgICAgUlRQU0VfTUNVX01TR19TSVpFLAomIzQzOwkJCQkJCSAgICAodTggKilyZXNwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSAmYW1wOyZhbXA7IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19zbWJ1c19vcHMgPSB7CiYjNDM7CS5zZW5kID0gcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kLAomIzQzOwkucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdiwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS0mZ3Q7ZGV2KTsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBpMmNfbWFzdGVyX3NlbmQoKSBtYXkgRE1BLCBzbyB0aGUgYnVmZmVyIG11c3Qgbm90IGJlIG9uIHRoZSBzdGFjay4gKi8KJiM0MzsJYnVmID0ga21lbWR1cChyZXEsIFJUUFNFX01DVV9NU0dfU0laRSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTsKJiM0MzsJa2ZyZWUoYnVmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJCSAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtJmd0O2Rldik7CiYjNDM7CWludCB0cmllcywgcmV0OwomIzQzOwl1OCAqYnVmOwomIzQzOwomIzQzOwkvKiBpMmNfbWFzdGVyX3JlY3YoKSBtYXkgRE1BLCBzbyByZWFkIGludG8gYW4gb2ZmLXN0YWNrIGJ1ZmZlci4gKi8KJiM0MzsJYnVmID0ga21hbGxvYyhSVFBTRV9NQ1VfTVNHX1NJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJ1ZikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgJmx0OyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodHJpZXMgJmd0OyAwKQomIzQzOwkJCW1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTsKJiM0MzsKJiM0MzsJCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJaWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUpIHsKJiM0MzsJCQltZW1jcHkocmVzcCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwkJCWlmIChydHBzZV9tY3VfcmVzcF9pc19maW5hbChyZXEsIHJlc3ApKSB7CiYjNDM7CQkJCXJldCA9IDA7CiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXQgPSAtRVRJTUVET1VUOwomIzQzO291dDoKJiM0MzsJa2ZyZWUoYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7CiYjNDM7CS5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCwKJiM0MzsJLnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2NsaWVudC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTsKJiM0MzsJYm9vbCB1c2VfbmF0aXZlOwomIzQzOwomIzQzOwltYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwomIzQzOwlpZiAoIW1hdGNoKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCAmIzM0O21pc3NpbmcgbWF0Y2ggZGF0YVxuJiMzNDspOwomIzQzOwomIzQzOwkvKiBUaGUgZnJhbWluZyAocmF3IEkyQyB2cyBTTUJ1cykgaXMgY2FycmllZCBieSB0aGUgbWF0Y2ggZGF0YS4gKi8KJiM0MzsJdXNlX25hdGl2ZSA9IG1hdGNoLSZndDtuYXRpdmVfaTJjOwomIzQzOwomIzQzOwlpZiAodXNlX25hdGl2ZSkgewomIzQzOwkJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtJmd0O2FkYXB0ZXIsIEkyQ19GVU5DX0kyQykpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCwKJiM0MzsJCQkJJiMzNDtwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LSZndDthZGFwdGVyLAomIzQzOwkJCQkJICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfAomIzQzOwkJCQkJICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSykpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCwKJiM0MzsJCQkJJiMzNDtTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBzZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwc2UtJmd0O2RldiA9IGRldjsKJiM0MzsJcHNlLSZndDtwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwlwc2UtJmd0O3RyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyAmYW1wO3J0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA6ICZhbXA7cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1cyYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjFfZGF0YSB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cyYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjJfZGF0YSB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMmIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9nZW4yX2kyY19kYXRhIH0sCiYjNDM7CXsgLyogc2VudGluZWwgKi8gfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X2kyY19vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0cHNlX21jdV9pMmNfZHJpdmVyID0gewomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUJCT0gJiMzNDtyZWFsdGVrLXBzZS1tY3UtaTJjJiMzNDssCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUJPSBydHBzZV9tY3VfaTJjX29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUJCT0gcnRwc2VfbWN1X2kyY19wcm9iZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Sm9uYXMgSmVsb25layAmbHQ7amVsb25lay5qb25hc0BnbWFpbC5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOTFjYWRiNTU2OWFiNDQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYwpAQCAtMCwwICYjNDM7MSwxNTUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2VyZGV2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7cmVhbHRlay1wc2UtbWN1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUCTE5MjAwCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoMTAwKQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVAltc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV91YXJ0IHsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsIHBzZTsKJiM0MzsJc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldjsKJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gcnhfZG9uZTsKJiM0MzsJc3BpbmxvY2tfdCByeF9sb2NrOwkJLyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi8KJiM0MzsJc2l6ZV90IHJ4X2xlbjsKJiM0MzsJdTggcnhfYnVmW1JUUFNFX01DVV9NU0dfU0laRV07CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIHRvX3J0cHNlX21jdV91YXJ0KHApICBjb250YWluZXJfb2YocCwgc3RydWN0IHJ0cHNlX21jdV91YXJ0LCBwc2UpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBObyBmcmFtaW5nIGlzIGRvbmUgaGVyZTogYSBnbGl0Y2hlZCBmcmFtZSBjb3N0cyBvbmUgdHJhbnNhY3Rpb24sIHRoZW4KJiM0MzsgKiB0aGUgbmV4dCBfc2VuZCByZS1mcmFtZXMgZnJvbSByeF9sZW4gMC4gUmVzeW5jIHdvcmtzIGJ5IHJldHVybmluZyBjb3VudAomIzQzOyAqIChub3QgdGFrZSksIGRyb3BwaW5nIGFueSBvdmVyZmxvdyBzbyBzZXJkZXYga2VlcHMgbm8gbGVmdG92ZXIgdG8gYmxlZWQKJiM0MzsgKiBpbnRvIHRoZSBuZXh0IGZyYW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzaXplX3QgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2LAomIzQzOwkJCQkgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpOwomIzQzOwlzaXplX3QgdGFrZTsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsICZhbXA7Y3R4LSZndDtyeF9sb2NrKSB7CiYjNDM7CQl0YWtlID0gbWluKGNvdW50LCBzaXplb2YoY3R4LSZndDtyeF9idWYpIC0gY3R4LSZndDtyeF9sZW4pOwomIzQzOwkJaWYgKHRha2UpIHsKJiM0MzsJCQltZW1jcHkoY3R4LSZndDtyeF9idWYgJiM0MzsgY3R4LSZndDtyeF9sZW4sIGJ1ZiwgdGFrZSk7CiYjNDM7CQkJY3R4LSZndDtyeF9sZW4gJiM0Mzs9IHRha2U7CiYjNDM7CQkJaWYgKGN0eC0mZ3Q7cnhfbGVuID09IHNpemVvZihjdHgtJmd0O3J4X2J1ZikpCiYjNDM7CQkJCWNvbXBsZXRlKCZhbXA7Y3R4LSZndDtyeF9kb25lKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBjb25zdW1lIGFsbCB0byBhdm9pZCBkZXN5bmMvbWlzYWxpZ25tZW50ICovCiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0gewomIzQzOwkucmVjZWl2ZV9idWYgPSBydHBzZV9tY3VfdWFydF9yZWNlaXZlLAomIzQzOwkud3JpdGVfd2FrZXVwID0gc2VyZGV2X2RldmljZV93cml0ZV93YWtldXAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7CiYjNDM7CWludCB3cml0dGVuOwomIzQzOwomIzQzOwkvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqLwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7Y3R4LSZndDtyeF9kb25lKTsKJiM0MzsJCWN0eC0mZ3Q7cnhfbGVuID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtJmd0O3NlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksCiYjNDM7CQkJCSAgICAgIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQpOwomIzQzOwlpZiAod3JpdHRlbiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gd3JpdHRlbjsKJiM0MzsJaWYgKHdyaXR0ZW4gIT0gc2l6ZW9mKCpyZXEpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpOwomIzQzOwomIzQzOwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2N0eC0mZ3Q7cnhfZG9uZSwgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVCkpCiYjNDM7CQlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsICZhbXA7Y3R4LSZndDtyeF9sb2NrKSB7CiYjNDM7CQlpZiAoY3R4LSZndDtyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSkKJiM0MzsJCQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJCW1lbWNweShyZXNwLCBjdHgtJmd0O3J4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcyA9IHsKJiM0MzsJLnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLAomIzQzOwkucmVjdiA9IHJ0cHNlX21jdV91YXJ0X3JlY3YsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpCiYjNDM7ewomIzQzOwl1MzIgc3BlZWQgPSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQ7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7c2VyZGV2LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljdHgtJmd0O3NlcmRldiA9IHNlcmRldjsKJiM0MzsJY3R4LSZndDtwc2UuZGV2ID0gZGV2OwomIzQzOwljdHgtJmd0O3BzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwljdHgtJmd0O3BzZS50cmFuc3BvcnQgPSAmYW1wO3J0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHM7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO2N0eC0mZ3Q7cnhfZG9uZSk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7Y3R4LSZndDtyeF9sb2NrKTsKJiM0MzsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7CiYjNDM7CXNlcmRldl9kZXZpY2Vfc2V0X2NsaWVudF9vcHMoc2VyZGV2LCAmYW1wO3J0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtmYWlsZWQgdG8gb3BlbiBzZXJkZXZcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgJiMzNDtjdXJyZW50LXNwZWVkJiMzNDssICZhbXA7c3BlZWQpOwomIzQzOwlzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIHNwZWVkKTsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpOwomIzQzOwlzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpOwomIzQzOwomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3JlZ2lzdGVyKCZhbXA7Y3R4LSZndDtwc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaFtdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMSYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjFfZGF0YSB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMiYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjJfZGF0YSB9LAomIzQzOwl7IC8qIHNlbnRpbmVsICovIH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNlcmRldl9kZXZpY2VfZHJpdmVyIHJ0cHNlX21jdV91YXJ0X2RyaXZlciA9IHsKJiM0MzsJLmRyaXZlciA9IHsKJiM0MzsJCS5uYW1lID0gJiMzNDtyZWFsdGVrLXBzZS1tY3UtdWFydCYjMzQ7LAomIzQzOwkJLm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7CS5wcm9iZSAgPSBydHBzZV9tY3VfdWFydF9wcm9iZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9zZXJkZXZfZGV2aWNlX2RyaXZlcihydHBzZV9tY3VfdWFydF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOWE2ZGEyYzhmMzdkOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaApAQCAtMCwwICYjNDM7MSw5MCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0gKJiM0MzsjZGVmaW5lIF9SRUFMVEVLX1BTRV9NQ1VfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaW1lIHRoZSBNQ1UgaXRzZWxmIG5lZWRzIGJldHdlZW4gYWNjZXB0aW5nIGEgcmVxdWVzdCBhbmQgaGF2aW5nIGEKJiM0MzsgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZQomIzQzOyAqIHVuZGVybHlpbmcgdHJhbnNwb3J0OiB0aGUgY29yZSBwYWNlcyB0cmFuc2FjdGlvbnMgYnkgUlRQU0VfTUNVX1JFU1BPTlNFX01TCiYjNDM7ICogYW5kIGJvdGggdHJhbnNwb3J0cyBzaXplIHRoZWlyIHBlci10cmFuc2FjdGlvbiByZWN2IGNlaWxpbmcgZnJvbQomIzQzOyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXMKJiM0MzsgKiBuZWVkaW5nIHVwIHRvIH4xcyB0byBwcm9kdWNlIGEgcmVwbHkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMJCQkyNQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUwkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogVG90YWwgdGltZSB0byBrZWVwIHJldHJ5aW5nIHRoZSBmaXJzdCBNQ1UgcmVhZCBhdCBwcm9iZSwgYW5kIHRoZSBwYXVzZQomIzQzOyAqIGJldHdlZW4gYXR0ZW1wdHMuIFJpZ2h0IGFmdGVyIGVuYWJsZS1ncGlvcyBpcyBhc3NlcnRlZCB0aGUgTUNVIG1heSBub3QKJiM0MzsgKiBhbnN3ZXIgb24gdGhlIGJ1cyB5ZXQ7IGdpdmUgaXQgYSBib3VuZGVkIHdpbmRvdyB0byBjb21lIHVwIGJlZm9yZQomIzQzOyAqIGRlY2xhcmluZyB0aGUgcHJvYmUgZmFpbGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUwkJMzAwMAomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMJCQkxMDAKJiM0MzsKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRQkJCTEyCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9tc2cgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHNlcV9udW07CiYjNDM7CXU4IHBheWxvYWRbOV07CiYjNDM7CXU4IGNoZWNrc3VtOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNQ1Ugc3RhdHVzIG9wY29kZXMgKHNlZW4gb24gdGhlIEJDTSBkaWFsZWN0OyBSVEwgbmV2ZXIgZW1pdHMgdGhlbSkuCiYjNDM7ICogSU5DT01QTEVURS9CQURfQ1NVTSBhcmUgdGVybWluYWw7IE5PVF9SRUFEWSBpcyB0cmFuc2llbnQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUJCTB4ZmQJLyogLUVCQURFICAgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU0JCTB4ZmUJLyogLUVCQURNU0cgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZCQkweGZmCS8qIC1FQUdBSU4gICovCiYjNDM7CiYjNDM7LyogQSBwb2xsaW5nIHRyYW5zcG9ydCBjYW4gc3RvcCBoZXJlOiB0aGUgbWF0Y2hpbmcgcmVwbHksIG9yIGEgdGVybWluYWwgZXJyb3IuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJCQkgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZXNwLSZndDtvcGNvZGUgPT0gcmVxLSZndDtvcGNvZGUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovCiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0OwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybDsKJiM0MzsKJiM0MzsvKiBQZXItY29tcGF0aWJsZSBtYXRjaCBkYXRhICh0aGUgb2ZfbWF0Y2ggLmRhdGEpLiAqLwomIzQzO3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDsKJiM0MzsJYm9vbCBuYXRpdmVfaTJjOwkvKiByYXctSTJDIGZyYW1pbmcgKHZzIFNNQnVzKTsgSTJDIHRyYW5zcG9ydCBvbmx5ICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgewomIzQzOwlpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7CiYjNDM7CWludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybCB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjsKJiM0MzsJc3RydWN0IG11dGV4IG11dGV4OyAvKiBzZXJpYWxpemVzIE1DVSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zYWN0aW9ucyAqLwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgKnRyYW5zcG9ydDsKJiM0MzsKJiM0MzsJc3RydWN0IHJlZ3VsYXRvciAqcG9lX3N1cHBseTsKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpOwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjFfZGF0YTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2RhdGE7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YTsKJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2ODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVIERyaXZlcioqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IGRyaXZlciBmb3IgYSBSZWFsdGVrIFBTRSBNQ1UsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BzZS1wZC9gLiBUaGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gSXQgc3VwcG9ydHMgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cywgd2hpY2ggbWVhbnMgd2UgY2FuIGxldmVyYWdlIGV4aXN0aW5nIGZ1enppbmcgY2FwYWJpbGl0aWVzIGZvciB0aGVzZSBpbnRlcmZhY2VzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgc3RhbmRhcmQgZmlsZXM6IGRvY3VtZW50YXRpb24sIE1BSU5UQUlORVJTIHVwZGF0ZSwgS2NvbmZpZywgTWFrZWZpbGUsIGFuZCB0aGUgY29yZSBkcml2ZXIgZmlsZXMgKGByZWFsdGVrLXBzZS1tY3UtY29yZS5jYCwgYHJlYWx0ZWstcHNlLW1jdS1pMmMuY2AsIGByZWFsdGVrLXBzZS1tY3UtdWFydC5jYCwgYW5kIHRoZSBoZWFkZXIpLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgaGFuZGxlIHRoaXM/IEdpdmVuIGl0JiMzOTtzIEkyQyBhbmQgVUFSVCwgdGhlIGFuc3dlciBpcyBsaWtlbHkgeWVzLiBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGRldmljZXMgdmlhIGAvZGV2L2kyYy0qYCBvciB2aXJ0dWFsIEkyQyBkZXZpY2VzLCBhbmQgVUFSVCBkZXZpY2VzIHZpYSBgc2VyZGV2YC4gSXQgYWxyZWFkeSBoYXMgSTJDIHN1cHBvcnQsIGluY2x1ZGluZyBmb3IgcHNldWRvLWRldmljZXMuIFRoZSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJMkMgZGV2aWNlcyBjYW4gYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggc3lzZnMgKGBuZXdfZGV2aWNlYCkgb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGEgYHBzZV9jb250cm9sbGVyX2RldmAsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgYW5kIGV0aHRvb2wgUFNFIGNvbW1hbmRzLiBUaGF0JiMzOTtzIGdvb2QsIHNvIHRoZSBldGh0b29sIGludGVyZmFjZSBjYW4gcmVhY2ggdGhpcyBpZiB0aGUgZGV2aWNlIGlzIGluc3RhbnRpYXRlZC4gVGhpcyBkZWZpbml0ZWx5IGluY3JlYXNlcyBpdHMgZnV6emluZyB2YWx1ZS4KCkZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgbmV3IGRyaXZlciB3aXRoIGZ1bmN0aW9uYWwgY2hhbmdlcywgYSBnb29kIHRhcmdldC4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMuIFdlIGhhdmUgYFBTRV9SRUFMVEVLX01DVWAsIGBQU0VfUkVBTFRFS19NQ1VfSTJDYCwgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scywgdG8gZ3VpZGUgdGhlIGZ1enppbmcgZWZmb3J0LiBMb29raW5nIGF0IGByZWFsdGVrLXBzZS1tY3UtY29yZS5jYCwgd2Ugc2VlIGEgcmFuZ2Ugb2YgZnVuY3Rpb25zOiBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgLCBgcnRwc2VfbWN1X3BvcnRfZW5hYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2Rpc2FibGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdGAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvYCwgYHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvYCwgYHJ0cHNlX21jdV9yZWdpc3RlcmAsIGBydHBzZV9tY3VfZG9feGZlcmAsIGBydHBzZV9tY3VfcG9ydF9xdWVyeWAsIGFuZCBgcnRwc2VfbWN1X3BvcnRfY21kYC4KCkZvciBJMkMsIHdlIGhhdmUgYHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZGAsIGBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZGAsIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YCwgYW5kIGBydHBzZV9tY3VfaTJjX3Byb2JlYC4KCkZvciBVQVJULCB3ZSBoYXZlIGBydHBzZV9tY3VfdWFydF9yZWNlaXZlYCwgYHJ0cHNlX21jdV91YXJ0X3NlbmRgLCBgcnRwc2VfbWN1X3VhcnRfcmVjdmAsIGFuZCBgcnRwc2VfbWN1X3VhcnRfcHJvYmVgLgoKVG8gdGFyZ2V0LCBJIHdpbGwgbGlzdCBgUFNFX1JFQUxURUtfTUNVX0kyQ2AgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAgaW4gdGhlIGNvbmZpZ3MuCgpGb3IgZnV6emluZyBmb2N1cyBzeW1ib2xzLCBJIHdpbGwgcHJpb3JpdGl6ZSB0aGVzZSBmdW5jdGlvbnMsIGZvciBub3cuCgpMZXQmIzM5O3MgbGlzdCB0aGVzZSBjb25maWdzIHRvIGVuc3VyZSB0aGlzIGlzIGVhc3kgdG8gcmVwcm9kdWNlOgoqICAgYFBTRV9SRUFMVEVLX01DVV9JMkNgCiogICBgUFNFX1JFQUxURUtfTUNVX1VBUlRgCgpBbmQgSSYjMzk7bGwgdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcyBmdXp6aW5nIHRhcmdldHM6CiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgCiogICBgcnRwc2VfbWN1X3BvcnRfZW5hYmxlYAoqICAgYHJ0cHNlX21jdV9wb3J0X2Rpc2FibGVgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YAoqICAgYHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdGAKKiAgIGBydHBzZV9tCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQU0VfUkVBTFRFS19NQ1UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc9MTQ9aWYgUFNFX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTE1LVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MTY6Y29uZmlnIFBTRV9SRUFMVEVLX01DVVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMTctXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MjI6Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9JMkNcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcJiMzNDtcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTI0LVx0ZGVwZW5kcyBvbiBJMkNcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjI1Olx0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzItXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzozMzpjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlRcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTM0LVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCYjMzQ7XG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0zNS1cdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVNcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjM2Olx0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSAmIzQzOz0gcHNlX2NvcmUub1xuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LWNvcmUub1xuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkMpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVCkgJiM0Mzs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZS05LW9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSAmIzQzOz0gcHNlX3JlZ3VsYXRvci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NzMKCQkJCQkJCW91dHB1dDogNDExCgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWx0ZWsgUFNFIE1DVSBEcml2ZXIgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IGl0JiMzOTtzIHN0cnVjdHVyZWQ6IGl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggbWVhbnMgdXNlcnNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHVzaW5nIG5ldGxpbmsuIFRoYXQmIzM5O3MgZ29vZCwga2VlcHMgaXQgbWFuYWdlYWJsZSBhbmQgZmxleGlibGUuIEkgc2VlIHRoYXQgaW5zdGFudGlhdGlvbiBjYW4gYmUgZG9uZSBlaXRoZXIgdGhyb3VnaCBJMkMgb3Igc2VyZGV2LiBNYWtlcyBzZW5zZTsgZ29vZCBkZXNpZ24gY2hvaWNlIGZvciBmbGV4aWJpbGl0eSBpbiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgUFNFX1JFQUxURUtfTUNVX0kyQ2AgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAsIHdoaWNoIGFyZSB3aGF0IEkmIzM5O2QgZXhwZWN0LgoKTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb3JlIGNvbXBvbmVudHMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBjbGVhciBvbiB0aGUga2V5IHN5bWJvbHM6IHRoZSBQU0UgY29udHJvbGxlciBvcHMgYW5kIHRoZSB0cmFuc3BvcnQgb3BzLiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW52b2x2ZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcuCgpBaCwgaGVyZSYjMzk7cyBhIGRldGFpbGVkIGxpc3QgdGhhdCBJIHdpbGwgdXNlIGFzIG15IGNvcmUgdW5kZXJzdGFuZGluZyBvZiBmdW5jdGlvbmFsaXR5OgoKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c2AKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd2AKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZWAKKiAgIGBydHBzZV9tY3VfcG9ydF9lbmFibGVgCiogICBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWAKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRgCiogICBgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0YAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW9gCiogICBgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9gCiogICBgcnRwc2VfbWN1X2RvX3hmZXJgCiogICBgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kYAoqICAgYHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdmAKKiAgIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kYAoqICAgYHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3ZgCiogICBgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZWAKKiAgIGBydHBzZV9tY3VfdWFydF9zZW5kYAoqICAgYHJ0cHNlX21jdV91YXJ0X3JlY3ZgCgpUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBicmVha2Rvd24gb2YgdGhlIGZ1bmN0aW9uYWxpdHksIGNvdmVyaW5nIHBvd2VyIG1hbmFnZW1lbnQsIGFuZCBjb21tdW5pY2F0aW9uIGludGVyZmFjZXMuIE5vdywgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gYmUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfUkVBTFRFS19NQ1VfSTJDJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9VQVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9kb194ZmVyJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfc21idXNfc2VuZCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3YmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfc2VuZCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9yZWN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdmlhIEkyQyBvciBVQVJULiBJdCBpbXBsZW1lbnRzIHRoZSBldGh0b29sIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBQU0Ugb3BlcmF0aW9ucyBhbmQgdGhlIHRyYW5zcG9ydCBsYXllciBpbXBsZW1lbnRhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2RvX3hmZXImIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfc21idXNfcmVjdiYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfdWFydF9zZW5kJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjQyOjI1LjE1NjU4Mzg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwNzc3OTIyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2RvX3hmZXJcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfc21idXNfc2VuZFwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2XCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2XCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWNlaXZlXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6NDI6MjUuMTU2NTkwODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTMyNjU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRmNDhmNGJmY2RmYTMwZTUyN2RlZjQ0ZGFhMmZmYTlkN2FjOWRmMTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTY6NDI6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczMzMwNjE5M2RiNTdlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sXFxuQEAgLTAsMCArMSwxNzYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBSZWFsdGVrIFBTRSBNQ1VcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gSm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjogfFxcbisgIEEgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgbWFuYWdlcyB0aGUgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpXFxuKyAgaGFyZHdhcmUgb24gYSByYW5nZSBvZiBtYW5hZ2VkIFBvRSBzd2l0Y2hlcy4gVGhlIGhvc3QgQ1BVIHRhbGtzIG9ubHkgdG9cXG4rICB0aGlzIE1DVSAtIG92ZXIgSTJDL1NNQnVzIG9yIFVBUlQgLSB1c2luZyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7XFxuKyAgdGhlIFBTRSBzaWxpY29uIGl0IGRyaXZlcyBzaXRzIGJlaGluZCB0aGUgTUNVIGFuZCBpcyBuZXZlciBhY2Nlc3NlZFxcbisgIGRpcmVjdGx5LiBGb3IgZXhhbXBsZSwgb24gdGhlIFp5eGVsIEdTMTkwMC0xMEhQIHRoZSBTb0MgcmVhY2hlcyB0aGUgTUNVXFxuKyAgb3ZlciBVQVJULCBhbmQgdGhlIE1DVSBtYW5hZ2VzIHRoZSBvbi1ib2FyZCBQU0UgY2hpcC5cXG4rXFxuKyAgVGhpcyBiaW5kaW5nIGRlc2NyaWJlcyB0aGUgTUNVIHRvZ2V0aGVyIHdpdGggaXRzIFJlYWx0ZWsgZmlybXdhcmU6IHRoZVxcbisgIGZpcm13YXJlIGFuZCBpdHMgaG9zdCBwcm90b2NvbCwgd2hpY2ggYXJlIHN0YWJsZSBhY3Jvc3MgYm9hcmRzLiBUaGVcXG4rICBtaWNyb2NvbnRyb2xsZXIgc2lsaWNvbiBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJ0IHRoYXQgdmFyaWVzLCBhbmQgdGhlXFxuKyAgUFNFIHNpbGljb24gYmVoaW5kIHRoZSBNQ1UgKFJlYWx0ZWsgUlRMODIzeC9SVEw4MjM5KiBvciBCcm9hZGNvbVxcbisgIEJDTTU5eHh4KSBpcyByZXBvcnRlZCBieSB0aGUgTUNVIGFuZCBkZXRlY3RlZCBhdCBydW50aW1lIC0gbmVpdGhlciBpc1xcbisgIG5hbWVkIGhlcmUuXFxuK1xcbisgIFR3byBwcm90b2NvbCBnZW5lcmF0aW9ucyBleGlzdCwgYm90aCBSZWFsdGVrJ3M6XFxuKyAgICBnZW4xICBvbGRlciBib2FyZHMsIHdoZXJlIHRoZSBNQ1UgZnJvbnRzIEJyb2FkY29tIFBTRSBzaWxpY29uXFxuKyAgICBnZW4yICB0aGUgYWx0ZXJlZCBwcm90b2NvbCB1c2VkIHdpdGggUmVhbHRlaydzIG93biBQU0Ugc2lsaWNvblxcbitcXG4rICBPbiBhbiBJMkMgYXR0YWNobWVudCB0aGUgZnJhbWluZyB0aGUgTUNVIGZpcm13YXJlIGV4cGVjdHMgaXMgcGFydCBvZiB0aGVcXG4rICBjb21wYXRpYmxlOiAnLXNtYnVzJyAocmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSBhbmQgYSByZXBlYXRlZFxcbisgIHN0YXJ0KSBvciAnLWkyYycgKGJhcmUgYmxvY2sgd3JpdGVzIGFuZCByZWFkcykuIEEgVUFSVCBhdHRhY2htZW50IGNhcnJpZXNcXG4rICBubyBmcmFtaW5nIHN1ZmZpeDsgdGhlIHRyYW5zcG9ydCBpcyBnaXZlbiBieSB0aGUgcGFyZW50ICdzZXJpYWwnIG5vZGUuXFxuK1xcbisgIEVhY2ggYm9hcmQgYWRkaXRpb25hbGx5IGNhcnJpZXMgYSBkZXZpY2Utc3BlY2lmaWMgY29tcGF0aWJsZSB0aGF0IGZhbGxzXFxuKyAgYmFjayB0byBvbmUgb2YgdGhlIHByb3RvY29sIGNvbXBhdGlibGVzIGFib3ZlLiBEcml2ZXJzIGJpbmQgb24gdGhlXFxuKyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kXFxuKyAgcmVzZXJ2ZXMgYSBwbGFjZSBmb3IgYSBmdXR1cmUgcGVyLWJvYXJkIHF1aXJrIHdpdGhvdXQgaGF2aW5nIHRvIHJldHJvZml0XFxuKyAgZGV2aWNlIHRyZWVzIGFscmVhZHkgaW4gdGhlIGZpZWxkLlxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgb25lT2Y6XFxuKyAgICAgICMgVUFSVFxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYTEtcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMVxcbitcXG4rICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcXG4rICAgICAgLSBpdGVtczpcXG4rICAgICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkyMC0yNGhwLXYyLXBzZVxcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjEtc21idXNcXG4rXFxuKyAgICAgICMgVUFSVFxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYjEtcHNlXFxuKyAgICAgICAgICAgICAgLSB6eXhlbCx4bWcxOTE1LTEwZXAtcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMlxcbitcXG4rICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcXG4rICAgICAgLSBpdGVtczpcXG4rICAgICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgICAgICAtIHp5eGVsLHhzMTkzMC0xMmhwLXBzZVxcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcXG4rXFxuKyAgICAgICMgSTJDLCByYXcgZnJhbWluZ1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gbGlua3N5cyxsZ3MzMjhtcGMtdjItcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgcG93ZXItc3VwcGx5OlxcbisgICAgZGVzY3JpcHRpb246IFJlZ3VsYXRvciBzdXBwbHlpbmcgdGhlIFBvRSBwb3dlciByYWlsLlxcbitcXG4rICBlbmFibGUtZ3Bpb3M6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rICAjIEEgJy1zbWJ1cycvJy1pMmMnIGNvbXBhdGlibGUgaXMgYW4gSTJDIGF0dGFjaG1lbnQ6IGl0IGhhcyAncmVnJyBhbmRcXG4rICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlRcXG4rICAjIGF0dGFjaG1lbnQ6IG5vICdyZWcnLCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXFxuKyAgICB0aGVuOlxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIHJlZ1xcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXFxuKyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxcbisgICAgZWxzZTpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6IGZhbHNlXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudFxcbisgIC0gfFxcbisgICAgaTJjIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ6eXhlbCx4czE5MzAtMTJocC1wc2VcXFwiLCBcXFwicmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XFxuKyAgLSB8XFxuKyAgICBpMmMge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZVxcXCIsIFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBVQVJUIGF0dGFjaG1lbnRcXG4rICAtIHxcXG4rICAgIHNlcmlhbCB7XFxuKyAgICAgICAgZXRoZXJuZXQtcHNlIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcXFwiLCBcXFwicmVhbHRlayxwc2UtbWN1LWdlbjFcXFwiO1xcbisgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gXFx1MDAzYzE5MjAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIHBzZS1waXMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLjNiMjFlNDZiZTY4YTFmIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjI3MTYsNiArMjI3MTYsMTMgQEAgUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0aW5jbHVkZS9zb3VuZC9ydCouaFxcbiBGOlxcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXFxuIFxcbitSRUFMVEVLIFBTRSBNQ1UgRFJJVkVSXFxuK006XFx0Sm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UqXFxuK1xcbiBSRUFMVEVLIE9UVE8gV0FUQ0hET0dcXG4gTTpcXHRTYW5kZXIgVmFuaGV1bGUgXFx1MDAzY3NhbmRlckBzdmFuaGV1bGUubmV0XFx1MDAzZVxcbiBMOlxcdGxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXFxuaW5kZXggN2VmMjk2NTdlZTVkZDEuLmEwZjJhZTY2OGM2N2M4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxcbiBcXG4gaWYgUFNFX0NPTlRST0xMRVJcXG4gXFxuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VcXG4rXFx0dHJpc3RhdGVcXG4rXFx0aGVscFxcbitcXHQgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVIGRyaXZlci4gVGhpcyBpcyBzZWxlY3RlZFxcbitcXHQgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxcbitcXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVV9JMkNcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXFxcIlxcbitcXHRkZXBlbmRzIG9uIEkyQ1xcbitcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuK1xcdGhlbHBcXG4rXFx0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxcbitcXHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxcbitcXHQgIHZpYSBJMkMvU01CdXMuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWxcXG4rXFx0ICBQU0Ugc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYVxcbitcXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLlxcbitcXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUXFxuK1xcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcXFwiXFxuK1xcdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVNcXG4rXFx0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxcbitcXHRoZWxwXFxuK1xcdCAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0VcXG4rXFx0ICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWRcXG4rXFx0ICB2aWEgVUFSVC4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbCBQU0VcXG4rXFx0ICBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXFxuK1xcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LlxcbitcXG4gY29uZmlnIFBTRV9SRUdVTEFUT1JcXG4gXFx0dHJpc3RhdGUgXFxcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclxcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcXG5pbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXFxuQEAgLTMsNiArMyw5IEBAXFxuIFxcbiBvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICs9IHBzZV9jb3JlLm9cXG4gXFxuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICs9IHJlYWx0ZWstcHNlLW1jdS1jb3JlLm9cXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkMpICs9IHJlYWx0ZWstcHNlLW1jdS1pMmMub1xcbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX1VBUlQpICs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cXG4gb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICs9IHBzZV9yZWd1bGF0b3Iub1xcbiBvYmotJChDT05GSUdfUFNFX1BENjkyWDApICs9IHBkNjkyeDAub1xcbiBvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBhNWJiNzg0MzYwYTVlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXFxuQEAgLTAsMCArMSw5OTMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXNcXG4rICogUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLiBUaGUgTUNVIHNwZWFrcyBhIDEyLWJ5dGUgZml4ZWQtZnJhbWVcXG4rICogbWFuYWdlbWVudCBwcm90b2NvbDsgdGhpcyBkcml2ZXIgY292ZXJzIHR3byBnZW5lcmF0aW9ucyBvZiB0aGVcXG4rICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLlxcbisgKlxcbisgKiBNYW55IFBvRSBzd2l0Y2ggZGVzaWducyBwdXQgYSBkZWRpY2F0ZWQgbWljcm9jb250cm9sbGVyIGluIGZyb250IG9mIHRoZVxcbisgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yXFxuKyAqIFVBUlQsIGFuZCB0aGUgTUNVIGluIHR1cm4gbWFuYWdlcyB0aGUgUFNFIGNoaXBzIG9uIHRoZSBib2FyZC4gVGhlIE1DVVxcbisgKiBzcGVha3MgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdFxcbisgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxcbisgKlxcbisgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuXFxuKyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmVcXG4rICogdGhlIE1DVSBmcm9udHMgYW5kIG1hbmFnZXMgQnJvYWRjb20gUFNFIHNpbGljb247IEdlbjIgYmVpbmcgdXNlZCB3aXRoXFxuKyAqIFJlYWx0ZWsgUFNFIHNpbGljb24uIFRoZSB0d28gc2hhcmUgZnJhbWUgZm9ybWF0IGFuZCBhIHN1bS1tb2QtMjU2XFxuKyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzO1xcbisgKiB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIHBlci1kaWFsZWN0IG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLlxcbisgKlxcbisgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcXG4rICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbFxcbisgKiBmYW1pbHksIGFuZCBcXFwiZHVtYiBQU0VcXFwiIG1vZGVzIHdoZXJlIG5vIGhvc3QgY29udHJvbCBpcyB3aXJlZCB1cCBhdCBhbGwuXFxuKyAqXFxuKyAqIFRoaXMgY29yZSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wsIGRlY29kaW5nL2VuY29kaW5nIG9mIE1DVVxcbisgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlc1xcbisgKiAocmVhbHRlay1wc2UtbWN1LWkyYywgcmVhbHRlay1wc2UtbWN1LXVhcnQpIHByb3ZpZGUgdGhlIHNlbmQvcmVjdlxcbisgKiBjYWxsYmFja3MuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaWZmaWVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taW5tYXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwicmVhbHRlay1wc2UtbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcXHRcXHQweDAxMzhcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcXHRcXHQweDAwMzlcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDXFx0XFx0MHgwMTM5XFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVxcdFxcdDB4ZTExMVxcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcXHRcXHQweGUxMjFcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEXFx0XFx0MHgwMFxcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkdcXHRcXHQweDAxXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcXHRcXHQweDAyXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1RcXHRcXHRcXHQweDAzXFx0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUXFx0XFx0MHgwNFxcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVFxcdFxcdDB4MDVcXHQvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1xcdFxcdDB4MDZcXG4rXFxuKy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUU1xcdFxcdFxcdDQ4XFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXFx0XFx0M1xcbitcXG4rZW51bSBydHBzZV9tY3VfY21kIHtcXG4rXFx0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxcbitcXHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcXG4rXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9FTkFCTEUsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxcbitcXG4rXFx0UlRQU0VfTUNVX05VTV9DTURTLFxcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUge1xcbitcXHR1OCBvcDtcXG4rXFx0Ym9vbCB2YWxpZDtcXG4rfTtcXG4rXFxuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcXHR7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH1cXG4rXFxuKy8qIFBhcnNlZCBNQ1UgcmVzcG9uc2Ugc3RydWN0dXJlcyAoZGVjb2RlZCBmcm9tIHJ0cHNlX21jdV9tc2cgcmVwbGllcykgKi9cXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XFxuK1xcdHU4IG1heF9wb3J0cztcXG4rXFx0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1OCBzd192ZXI7XFxuK1xcdHU4IG1jdV90eXBlO1xcbitcXHR1OCBjb25maWdfc3RhdHVzO1xcbitcXHR1OCBleHRfdmVyO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcXG4rXFx0dTggdXZsbztcXG4rXFx0dTggb3ZsbztcXG4rXFx0Ym9vbCBwcmVhbGxvY19lbmFibGU7XFxuK1xcdHU4IG51bV9vZl9wc2VzO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XFxuK1xcdHU4IHN0czE7XFxuK1xcdHU4IHN0czI7XFxuK1xcdHU4IHN0czM7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xcbitcXHR1MTYgdm9sdGFnZV9yYXc7XFx0LyogNjQuNDVtVi9MU0IgKi9cXG4rXFx0dTE2IGN1cnJlbnRfcmF3O1xcdC8qIDFtQS9MU0IgKi9cXG4rXFx0dTE2IHRlbXBlcmF0dXJlX3JhdztcXHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xcbitcXHR1MTYgcG93ZXJfcmF3O1xcdFxcdC8qIDEwMG1XL0xTQiAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XFxuK1xcdGJvb2wgZW5hYmxlO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcge1xcbitcXHR1OCBtYXhfcG93ZXI7XFxuK1xcdHU4IHByaW9yaXR5O1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgb3Bjb2RlW1JUUFNFX01DVV9OVU1fQ01EU107XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcXG4rXFx0ICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlXFxuK1xcdCAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssXFxuK1xcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7XFxuK1xcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XFxuK1xcdGNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8ge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1MzIgbWF4X21XX3Blcl9wb3J0O1xcbitcXHRlbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDtcXHQvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovXFxuK1xcdHUzMiBwd19zZXRfbHNiX21XO1xcdFxcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xcbitcXHR1MzIgcHdfcmVhZF9sc2JfbVc7XFx0XFx0LyogTFNCIG9mIGV4dF9jb25maWcubWF4X3Bvd2VyIHJlYWQtYmFjaywgaW4gbVcgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM4Yl9pbmZvID0ge1xcbitcXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QixcXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJSVEw4MjM4QlxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxcbitcXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzksXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiUlRMODIzOVxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSA0MDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiUlRMODIzOUNcXFwiLFxcbitcXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXFxuK1xcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gNDAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTExX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExLFxcbitcXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXFxuK1xcdC5uYW1lID0gXFxcIkJDTTU5MTExXFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gMjAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxLFxcbitcXHQvKlxcbitcXHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxcbitcXHQgKiBhbmQgdGhlIEJDTSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kIChcXHUwMDNjPTUxVyk7XFxuK1xcdCAqIGNhcCBhdCB0aGUgMzBXIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBvZmZlcnMuXFxuK1xcdCAqL1xcbitcXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXFxuK1xcdC5uYW1lID0gXFxcIkJDTTU5MTIxXFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gMjAwLFxcbit9O1xcbitcXG4rLyogSGVscGVycyBhbmQgYmFzaWMgZnVuY3Rpb25zICovXFxuK1xcbitzdGF0aWMgc3RydWN0IHJ0cHNlX21jdV9jdHJsICp0b19ydHBzZV9tY3VfY3RybChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4re1xcbitcXHRyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwsIHBjZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X21zZ19pbml0KHN0cnVjdCBydHBzZV9tY3VfbXNnICptc2csIHU4IG9wY29kZSlcXG4re1xcbitcXHRtZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpO1xcbitcXHRtc2ctXFx1MDAzZW9wY29kZSA9IG9wY29kZTtcXG4rfVxcbitcXG4rc3RhdGljIHU4IHJ0cHNlX21jdV9jaGVja3N1bShjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHU4IHN1bSA9IDA7XFxuK1xcbitcXHR3aGlsZSAobGVuLS0pXFxuK1xcdFxcdHN1bSArPSAqYnVmKys7XFxuK1xcdHJldHVybiBzdW07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2RvX3hmZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJlcS1cXHUwMDNlY2hlY2tzdW0gPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVxLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnBzZS1cXHUwMDNlbXV0ZXgpIHtcXG4rXFx0XFx0cmV0ID0gcHNlLVxcdTAwM2V0cmFuc3BvcnQtXFx1MDAzZXNlbmQocHNlLCByZXEpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdFxcbitcXHRcXHQgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0b1xcbitcXHRcXHQgKiB1cy4gUGFjZSB0aGUgdHJhbnNhY3Rpb24gaGVyZSBzbyBlYWNoIHRyYW5zcG9ydCBjYW4ga2VlcCBpdHMgcmVjdlxcbitcXHRcXHQgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1zbGVlcChSVFBTRV9NQ1VfUkVTUE9OU0VfTVMpO1xcbitcXG4rXFx0XFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xcbitcXHRcXHRyZXQgPSBwc2UtXFx1MDAzZXRyYW5zcG9ydC1cXHUwMDNlcmVjdihwc2UsIHJlcSwgcmVzcCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4cGxpY2l0IE1DVSBlcnJvciBvcGNvZGVzIChvYnNlcnZlZCBvbiB0aGUgQkNNIGRpYWxlY3Q7IGhhcm1sZXNzXFxuK1xcdCAqIHRvIGNoZWNrIGZvciBSVEwgdG9vKS4gQ2F0Y2ggdGhlc2UgYmVmb3JlIHRoZSBnZW5lcmljIG9wY29kZS9DUkNcXG4rXFx0ICogbWlzbWF0Y2ggcGF0aCBzbyBjYWxsZXJzIHNlZSBhIG1lYW5pbmdmdWwgZXJybm8uXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2ggKHJlc3AtXFx1MDAzZW9wY29kZSkge1xcbitcXHRjYXNlIFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURTpcXG4rXFx0XFx0cmV0dXJuIC1FQkFERTtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOlxcbitcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFk6XFxuK1xcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmVzcC1cXHUwMDNlb3Bjb2RlICE9IHJlcS1cXHUwMDNlb3Bjb2RlIHx8XFxuK1xcdCAgICByZXNwLVxcdTAwM2VzZXFfbnVtICE9IHJlcS1cXHUwMDNlc2VxX251bSB8fFxcbitcXHQgICAgcmVzcC1cXHUwMDNlY2hlY2tzdW0gIT0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpKVxcbitcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9xdWVyeShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wY29kZSk7XFxuK1xcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgcmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocmVzcC1cXHUwMDNlcGF5bG9hZFswXSAhPSBwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGNvZGUpO1xcbitcXHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XFxuK1xcdHJlcS5wYXlsb2FkWzFdID0gYXJnO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocmVzcC5wYXlsb2FkWzBdICE9IHBvcnQgfHwgcmVzcC5wYXlsb2FkWzFdICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIEdsb2JhbCBvcGVyYXRpb25zICovXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wYy1cXHUwMDNlb3ApO1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgKmNvbmZpZylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wYy1cXHUwMDNlb3ApO1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNldXZsbyA9IHJlc3AucGF5bG9hZFswXTtcXG4rXFx0Y29uZmlnLVxcdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xcbitcXHRjb25maWctXFx1MDAzZXByZWFsbG9jX2VuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMHgxKTtcXG4rXFx0Y29uZmlnLVxcdTAwM2VudW1fb2ZfcHNlcyA9IHJlc3AucGF5bG9hZFs2XTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3BjLVxcdTAwM2VvcCk7XFxuK1xcdHJlcS5wYXlsb2FkWzBdID0gZW5hYmxlID8gMHgxIDogMHgwO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XFxuK31cXG4rXFxuKy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzdGF0dXMtXFx1MDAzZXN0czEgPSByZXNwLnBheWxvYWRbMV07XFxuK1xcdHN0YXR1cy1cXHUwMDNlc3RzMiA9IHJlc3AucGF5bG9hZFsyXTtcXG4rXFx0c3RhdHVzLVxcdTAwM2VzdHMzID0gcmVzcC5wYXlsb2FkWzNdO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRtZWFzdXJlbWVudC1cXHUwMDNldm9sdGFnZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXFx1MDAyNnJlc3AucGF5bG9hZFsxXSk7XFxuK1xcdG1lYXN1cmVtZW50LVxcdTAwM2VjdXJyZW50X3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cmVzcC5wYXlsb2FkWzNdKTtcXG4rXFx0bWVhc3VyZW1lbnQtXFx1MDAzZXRlbXBlcmF0dXJlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cmVzcC5wYXlsb2FkWzVdKTtcXG4rXFx0bWVhc3VyZW1lbnQtXFx1MDAzZXBvd2VyX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cmVzcC5wYXlsb2FkWzddKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgKmNvbmZpZylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNlZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAxKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2VtYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107XFxuK1xcdGNvbmZpZy1cXHUwMDNlcHJpb3JpdHkgPSByZXNwLnBheWxvYWRbNF07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBlbmFibGUgPyAweDEgOiAweDApO1xcbit9XFxuK1xcbisvKiBQU0UgY29udHJvbGxlciBvcHMgKi9cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHBzZV9hZG1pbl9zdGF0ZSAqYWRtaW5fc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhwc2UsIGlkLCBcXHUwMDI2Y29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGFkbWluX3N0YXRlLVxcdTAwM2VjMzNfYWRtaW5fc3RhdGUgPSBjb25maWcuZW5hYmxlID8gRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQgOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcXHUwMDI2c3RhdHVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ERUxJVkVSSU5HO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1RFU1Q7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFQ6XFxuK1xcdFxcdHB3X3N0YXR1cy1cXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19PVEhFUkZBVUxUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1VOS05PV047XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3Moc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFxcdTAwMjZzdGF0dXMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhXFxuK1xcdCAqIGZhdWx0L3Rlc3Qgc3RhdGUgKG9yIGEgY29kZSByZXNlcnZlZCBvbiB0aGUgY3VycmVudCBkaWFsZWN0KSBpdFxcbitcXHQgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpc1xcbitcXHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlc1xcbitcXHQgKiB2aWEgdGhlIHBvd2VyIHN0YXR1cy5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzpcXG4rXFx0XFx0cmV0dXJuIHBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyhcXHUwMDI2c3RhdHVzKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcXHUwMDI2bWVhc3VyZW1lbnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogMTAwbVcgcGVyIExTQiAqL1xcbitcXHRyZXR1cm4gbWVhc3VyZW1lbnQucG93ZXJfcmF3ICogMTAwVTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgbWVhc3VyZW1lbnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcdHUzMiB1VjtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcXHUwMDI2bWVhc3VyZW1lbnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogNjQuNDVtViBwZXIgTFNCICovXFxuK1xcdHVWID0gbWVhc3VyZW1lbnQudm9sdGFnZV9yYXcgKiA2NDQ1MFU7XFxuK1xcdHJldHVybiBtaW5fdCh1MzIsIHVWLCBJTlRfTUFYKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIGZhbHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXFx1MDAyNmNvbmZpZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gY29uZmlnLm1heF9wb3dlciAqIHBzZS1cXHUwMDNlY2hpcC1cXHUwMDNlcHdfcmVhZF9sc2JfbVc7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLVxcdTAwM2VjaGlwO1xcbitcXHR1OCBwcmdfdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKG1heF9tVyBcXHUwMDNjIDAgfHwgbWF4X21XIFxcdTAwM2UgY2hpcC1cXHUwMDNlbWF4X21XX3Blcl9wb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdHR5cGVfb3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07XFxuK1xcdHZhbF9vcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbY2hpcC1cXHUwMDNlcHdfc2V0X2NtZF07XFxuK1xcdC8qIHB3X3NldF9sc2JfbVcgaXMgdGhlIGRpdmlzb3IgYmVsb3c7IHJlamVjdCBhIGNoaXAgdGhhdCBsYWNrcyBpdC4gKi9cXG4rXFx0aWYgKCF0eXBlX29wYy1cXHUwMDNldmFsaWQgfHwgIXZhbF9vcGMtXFx1MDAzZXZhbGlkIHx8ICFjaGlwLVxcdTAwM2Vwd19zZXRfbHNiX21XKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcXG4rXFx0ICogbGltaXQgdmFsdWUuIElmIHRoZSBzZWNvbmQgY21kIGZhaWxzLCB0aGUgcG9ydCBpcyBsZWZ0IGluXFxuK1xcdCAqIHVzZXItZGVmaW5lZCBtb2RlIGJ1dCB3aXRoIHRoZSBwcmV2aW91cyBsaW1pdCB2YWx1ZTsgdGhlIG5leHRcXG4rXFx0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB0eXBlX29wYy1cXHUwMDNlb3AsIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwcmdfdmFsID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfbVcgLyBjaGlwLVxcdTAwM2Vwd19zZXRfbHNiX21XLCBVOF9NQVgpO1xcbitcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLVxcdTAwM2VvcCwgcHJnX3ZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX3B3X2xpbWl0X3JhbmdlICpyYW5nZTtcXG4rXFxuK1xcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlKTtcXG4rXFx0aWYgKCFyYW5nZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyYW5nZVswXS5taW4gPSAwO1xcbitcXHRyYW5nZVswXS5tYXggPSBwc2UtXFx1MDAzZWNoaXAtXFx1MDAzZW1heF9tV19wZXJfcG9ydDtcXG4rXFxuK1xcdG91dC1cXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcXHUwMDI2Y29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBjb25maWcucHJpb3JpdHk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcbitcXHRpZiAocHJpbyBcXHUwMDNlIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWSlcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCBvcGMtXFx1MDAzZW9wLCBwcmlvKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcnRwc2VfbWN1X29wcyA9IHtcXG4rXFx0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcXG4rXFx0LnBpX2dldF9wd19zdGF0dXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzLFxcbitcXHQucGlfZ2V0X3B3X2NsYXNzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzLFxcbitcXHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXFxuK1xcdC5waV9lbmFibGUgPSBydHBzZV9tY3VfcG9ydF9lbmFibGUsXFxuK1xcdC5waV9kaXNhYmxlID0gcnRwc2VfbWN1X3BvcnRfZGlzYWJsZSxcXG4rXFx0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXFxuK1xcdC5waV9nZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQsXFxuK1xcdC5waV9zZXRfcHdfbGltaXQgPSBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQsXFxuK1xcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcXG4rXFx0LnBpX2dldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8sXFxuK1xcdC5waV9zZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X3NldF9wcmlvLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfZGlzY292ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgZXh0X2NvbmZpZztcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEEgYm9vdGluZyBNQ1UgbWF5IHN0YXkgc2lsZW50ICgtRVRJTUVET1VUKSwgbm90IEFDSyBpdHMgYWRkcmVzc1xcbitcXHQgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGFcXG4rXFx0ICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhXFxuK1xcdCAqIGJvdW5kZWQgd2luZG93OyBvdGhlciBlcnJvcnMgKGUuZy4gLUVPUE5PVFNVUFApIGFyZSBmYXRhbCBhbmQgZmFpbFxcbitcXHQgKiBpbW1lZGlhdGVseS5cXG4rXFx0ICovXFxuK1xcdGRlYWRsaW5lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUyk7XFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVUSU1FRE9VVCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOWElPIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRVJFTU9URUlPIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICByZXQgIT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVCQURNU0cgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQkFERSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdG1zbGVlcChSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NUyk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gcmVhZCBNQ1UgaW5mb1xcXFxuXFxcIik7XFxuK1xcbitcXHRzd2l0Y2ggKGluZm8tXFx1MDAzZWRldmljZV9pZCkge1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEI6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZydGw4MjM4Yl9pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzk6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZydGw4MjM5X2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZydGw4MjM5Y19pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExOlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2YmNtNTkxMTFfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMTpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNmJjbTU5MTIxX2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgLUVJTlZBTCwgXFxcInVua25vd24gUFNFIGlkIDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW5mby1cXHUwMDNlZGV2aWNlX2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VtYXhfcG9ydHMgfHwgaW5mby1cXHUwMDNlbWF4X3BvcnRzIFxcdTAwM2UgUlRQU0VfTUNVX01BWF9QT1JUUylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIk1DVSByZXBvcnRzIGludmFsaWQgcG9ydCBjb3VudCAldVxcXFxuXFxcIiwgaW5mby1cXHUwMDNlbWF4X3BvcnRzKTtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsIFxcdTAwMjZleHRfY29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIHJldCwgXFxcImZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGRldl9pbmZvKHBzZS1cXHUwMDNlZGV2LCBcXFwiJXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXFxcXG5cXFwiLFxcbitcXHRcXHQgcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VtY3VfdHlwZV9zdHIoaW5mby1cXHUwMDNlbWN1X3R5cGUpLCBwc2UtXFx1MDAzZWNoaXAtXFx1MDAzZW5hbWUsXFxuK1xcdFxcdCBpbmZvLVxcdTAwM2VkZXZpY2VfaWQsIGluZm8tXFx1MDAzZW1heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSlcXG4re1xcbitcXHRyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSBkYXRhO1xcbitcXG4rXFx0cnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7XFxuK31cXG4rXFxuK2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcXG4rXFx0c3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcnRwc2VfbWN1X21zZykgIT0gUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtXFx1MDAzZWRldiwgXFx1MDAyNnBzZS1cXHUwMDNlbXV0ZXgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEocHNlLVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoIW1hdGNoKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgLUVOT0RFViwgXFxcIm1pc3NpbmcgbWF0Y2ggZGF0YVxcXFxuXFxcIik7XFxuK1xcdHBzZS1cXHUwMDNlZGlhbGVjdCA9IG1hdGNoLVxcdTAwM2VkaWFsZWN0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0XFxuK1xcdCAqIHByb2JlIHRpbWUsIHJhdGhlciB0aGFuIE5VTEwtZGVyZWYnaW5nIGxhdGVyIGZyb20gYSBmYXN0IHBhdGguXFxuK1xcdCAqL1xcbitcXHRpZiAoIXBzZS1cXHUwMDNlZGlhbGVjdCB8fFxcbitcXHQgICAgIXBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8gfHxcXG4rXFx0ICAgICFwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3BvcnRfY2xhc3MgfHxcXG4rXFx0ICAgICFwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW1jdV90eXBlX3N0cilcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImRpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxcXFxuXFxcIik7XFxuK1xcbitcXHRwc2UtXFx1MDAzZXBvZV9zdXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQocHNlLVxcdTAwM2VkZXYsIFxcXCJwb3dlclxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHBzZS1cXHUwMDNlcG9lX3N1cHBseSkpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCBQVFJfRVJSKHBzZS1cXHUwMDNlcG9lX3N1cHBseSksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgUG9FIHN1cHBseVxcXFxuXFxcIik7XFxuK1xcbitcXHRlbmFibGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHBzZS1cXHUwMDNlZGV2LCBcXFwiZW5hYmxlXFxcIiwgR1BJT0RfT1VUX0hJR0gpO1xcbitcXHRpZiAoSVNfRVJSKGVuYWJsZV9ncGlvKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIFBUUl9FUlIoZW5hYmxlX2dwaW8pLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGVuYWJsZSBncGlvXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsIFxcdTAwMjZpbmZvKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHNlLVxcdTAwM2Vwb2Vfc3VwcGx5KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIHJldCwgXFxcImZhaWxlZCB0byBlbmFibGUgUG9FIHN1cHBseVxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVxcdTAwM2VkZXYsIHJ0cHNlX21jdV9yZWd1bGF0b3JfZGlzYWJsZSwgcHNlLVxcdTAwM2Vwb2Vfc3VwcGx5KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghaW5mby5zeXN0ZW1fZW5hYmxlKSB7XFxuK1xcdFxcdHJldCA9IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgdHJ1ZSk7XFxuK1xcdFxcdC8qIERpYWxlY3RzIHdpdGhvdXQgYSBnbG9iYWwtc3RhdGUgY29uY2VwdCAoZS5nLiBCQ00pIHJldHVyblxcbitcXHRcXHQgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyBcXFwibm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkXFxcIi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoIXJldCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50XFxuK1xcdCAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbid0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yXFxuK1xcdCAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyXFxuK1xcdCAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuXFxuK1xcdCAqL1xcbitcXG4rXFx0LyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXJcXG4rXFx0ICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuXFxuK1xcdCAqL1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2Lm9wcyAgICAgID0gXFx1MDAyNnJ0cHNlX21jdV9vcHM7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYuZGV2ICAgICAgPSBwc2UtXFx1MDAzZWRldjtcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMztcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzO1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTtcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcXG4rXFxuK1xcdHJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS1cXHUwMDNlZGV2LCBcXHUwMDI2cHNlLVxcdTAwM2VwY2Rldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X3JlZ2lzdGVyKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0aW5mby1cXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcXG4rXFx0aW5mby1cXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdC8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi9cXG4rXFx0cmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtXFx1MDAzZXN0czIpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjJfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcXG4re1xcbitcXHRzd2l0Y2ggKG1jdV90eXBlKSB7XFxuK1xcdGNhc2UgMHgwMDpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYzMTBcXFwiO1xcbitcXHRjYXNlIDB4MDE6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJGMjMwXFxcIjtcXG4rXFx0Y2FzZSAweDAyOlxcdHJldHVybiBcXFwiR2lnYURldmljZSBHRDMyRjMwM1xcXCI7XFxuK1xcdGNhc2UgMHgwMzpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYxMDNcXFwiO1xcbitcXHRjYXNlIDB4MDQ6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJFMTAzXFxcIjtcXG4rXFx0Y2FzZSAweDEwOlxcdHJldHVybiBcXFwiTnV2b3RvbiBNMDUxNlxcXCI7XFxuK1xcdGNhc2UgMHgxMTpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1NjRcXFwiO1xcbitcXHRjYXNlIDB4MTI6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE5VQzAyOVxcXCI7XFxuK1xcdGRlZmF1bHQ6XFx0cmV0dXJuIFxcXCJ1bmtub3duXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxcbit7XFxuK1xcdGluZm8tXFx1MDAzZW1heF9wb3J0cyA9IHBheWxvYWRbMV07XFxuK1xcdC8qIEJDTSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlXFxuK1xcdCAqIFxcXCJyZW1vdGUgZW5hYmxlXFxcIiBiaXQgaW4gdGhlIHN5c3RlbS1zdGF0dXMgZmxhZ3MgYXQgcGF5bG9hZFs3XS5cXG4rXFx0ICovXFxuK1xcdGluZm8tXFx1MDAzZXN5c3RlbV9lbmFibGUgPSAhIShwYXlsb2FkWzddIFxcdTAwMjYgQklUKDIpKTtcXG4rXFx0aW5mby1cXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZwYXlsb2FkWzNdKTtcXG4rXFx0aW5mby1cXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcXG4rXFx0aW5mby1cXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xcbitcXHRpbmZvLVxcdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcXG4rXFx0aW5mby1cXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjFfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXFxuK3tcXG4rXFx0LyogQkNNIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LlxcbitcXHQgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlXFxuK1xcdCAqIG5vaXNlLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHN0YXR1cy1cXHUwMDNlc3RzMyBcXHUwMDI2IDB4MGY7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKVxcbit7XFxuK1xcdHN3aXRjaCAobWN1X3R5cGUpIHtcXG4rXFx0Y2FzZSAweDAwOlxcdHJldHVybiBcXFwiU1QgTWljcm8gU1QzMkYxMDBcXFwiO1xcbitcXHRjYXNlIDB4MDE6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE0wNXh4IExBTlxcXCI7XFxuK1xcdGNhc2UgMHgwMjpcXHRyZXR1cm4gXFxcIlNUIE1pY3JvIFNURjAzMEM4XFxcIjtcXG4rXFx0Y2FzZSAweDAzOlxcdHJldHVybiBcXFwiTnV2b3RvbiBNMDU4U0FOXFxcIjtcXG4rXFx0Y2FzZSAweDA0OlxcdHJldHVybiBcXFwiTnV2b3RvbiBOVUMxMjJcXFwiO1xcbitcXHRkZWZhdWx0OlxcdHJldHVybiBcXFwidW5rbm93blxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyogTWFwIGVhY2ggbG9naWNhbCBjb21tYW5kIHRoZSBjb3JlIGlzc3VlcyB0byBpdHMgcGVyLWRpYWxlY3Qgb3Bjb2RlLiAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjIgPSB7XFxuK1xcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvLFxcbitcXHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLFxcbitcXHQubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMl9tY3VfdHlwZV9zdHIsXFxuK1xcdC5vcGNvZGUgPSB7XFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdXFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXFxuK1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDAxKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVxcdD0gUlRQU0VfTUNVX09QKDB4MTMpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cXHQ9IFJUUFNFX01DVV9PUCgweDE1KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDIpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cXHQ9IFJUUFNFX01DVV9PUCgweDQ0KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDgpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVxcdD0gUlRQU0VfTUNVX09QKDB4NDkpLFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0ge1xcbitcXHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyxcXG4rXFx0LnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2dlbjFfcGFyc2VfcG9ydF9jbGFzcyxcXG4rXFx0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLFxcbitcXHQub3Bjb2RlID0ge1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgyMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxcbitcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cXHQ9IFJUUFNFX01DVV9PUCgweDE2KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldXFx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDIxKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXFx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDI1KSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR11cXHQ9IFJUUFNFX01DVV9PUCgweDI2KSxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhID0ge1xcbitcXHQuZGlhbGVjdCA9IFxcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4xLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMV9kYXRhKTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9kYXRhID0ge1xcbitcXHQuZGlhbGVjdCA9IFxcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMl9kYXRhKTtcXG4rXFxuKy8qIFNhbWUgZGlhbGVjdCBhcyBnZW4yLCBidXQgdGhlIE1DVSBleHBlY3RzIHJhdy1JMkMgZnJhbWluZy4gKi9cXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhID0ge1xcbitcXHQuZGlhbGVjdCA9IFxcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxcbitcXHQubmF0aXZlX2kyYyA9IHRydWUsXFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoY29yZSlcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiSm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NzE3Njg0YzBjYmQ5MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jXFxuQEAgLTAsMCArMSwxNzEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJyZWFsdGVrLXBzZS1tY3UuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvXFxuKyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXFxuKyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcXG4rICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1xcdFJUUFNFX01DVV9SRVNQT05TRV9NU1xcbisjZGVmaW5lIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTXFx0KFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMgLyBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVxcdTAwM2VkZXYpO1xcbitcXG4rXFx0LyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqL1xcbitcXHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVxcdTAwM2VvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICh1OCAqKXJlcSArIDEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHRyaWVzLCByZXQ7XFxuK1xcbitcXHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xcbitcXHRcXHRpZiAodHJpZXMgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XFxuK1xcbitcXHRcXHQvKiBNQ1UgbmVlZHMgMHgwMCBhcyBjb21tYW5kIGJ5dGUgZm9yIHJlYWQgKi9cXG4rXFx0XFx0cmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgUlRQU0VfTUNVX01TR19TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHU4ICopcmVzcCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSBcXHUwMDI2XFx1MDAyNiBydHBzZV9tY3VfcmVzcF9pc19maW5hbChyZXEsIHJlc3ApKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19zbWJ1c19vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kLFxcbitcXHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdixcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXFx1MDAzZWRldik7XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIGkyY19tYXN0ZXJfc2VuZCgpIG1heSBETUEsIHNvIHRoZSBidWZmZXIgbXVzdCBub3QgYmUgb24gdGhlIHN0YWNrLiAqL1xcbitcXHRidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFidWYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpO1xcbitcXHRrZnJlZShidWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgPyAwIDogLUVJTztcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aW50IHRyaWVzLCByZXQ7XFxuK1xcdHU4ICpidWY7XFxuK1xcbitcXHQvKiBpMmNfbWFzdGVyX3JlY3YoKSBtYXkgRE1BLCBzbyByZWFkIGludG8gYW4gb2ZmLXN0YWNrIGJ1ZmZlci4gKi9cXG4rXFx0YnVmID0ga21hbGxvYyhSVFBTRV9NQ1VfTVNHX1NJWkUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJ1ZilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xcbitcXHRcXHRpZiAodHJpZXMgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XFxuK1xcbitcXHRcXHRyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUpIHtcXG4rXFx0XFx0XFx0bWVtY3B5KHJlc3AsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFx0XFx0XFx0aWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldCA9IC1FVElNRURPVVQ7XFxuK291dDpcXG4rXFx0a2ZyZWUoYnVmKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcXG4rXFx0LnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcXG4rXFx0Ym9vbCB1c2VfbmF0aXZlO1xcbitcXG4rXFx0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4rXFx0aWYgKCFtYXRjaClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCBcXFwibWlzc2luZyBtYXRjaCBkYXRhXFxcXG5cXFwiKTtcXG4rXFxuK1xcdC8qIFRoZSBmcmFtaW5nIChyYXcgSTJDIHZzIFNNQnVzKSBpcyBjYXJyaWVkIGJ5IHRoZSBtYXRjaCBkYXRhLiAqL1xcbitcXHR1c2VfbmF0aXZlID0gbWF0Y2gtXFx1MDAzZW5hdGl2ZV9pMmM7XFxuK1xcbitcXHRpZiAodXNlX25hdGl2ZSkge1xcbitcXHRcXHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cXHUwMDNlYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcXG4rXFx0XFx0XFx0XFx0XFxcInBsYWluLUkyQyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgSTJDLWNhcGFibGUgYWRhcHRlclxcXFxuXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVxcdTAwM2VhZGFwdGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0spKVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxcbitcXHRcXHRcXHRcXHRcXFwiU01CdXMgTUNVIHByb3RvY29sIHJlcXVpcmVzIFNNQnVzIEkyQy1ibG9jayBzdXBwb3J0XFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cHNlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwc2UpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwc2UpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cHNlLVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYub3duZXIgPSBUSElTX01PRFVMRTtcXG4rXFx0cHNlLVxcdTAwM2V0cmFuc3BvcnQgPSB1c2VfbmF0aXZlID8gXFx1MDAyNnJ0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA6IFxcdTAwMjZydHBzZV9tY3VfaTJjX3NtYnVzX29wcztcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X2dlbjFfZGF0YSB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1xcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4yX2kyY19kYXRhIH0sXFxuK1xcdHsgLyogc2VudGluZWwgKi8gfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfaTJjX29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBydHBzZV9tY3VfaTJjX2RyaXZlciA9IHtcXG4rXFx0LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJyZWFsdGVrLXBzZS1tY3UtaTJjXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlXFx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmVcXHRcXHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXFxuK307XFxuK21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkpvbmFzIEplbG9uZWsgXFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkxY2FkYjU1NjlhYjQ0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jXFxuQEAgLTAsMCArMSwxNTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXJkZXYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJyZWFsdGVrLXBzZS1tY3UuaFxcXCJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUXFx0MTkyMDBcXG4rI2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUXFx0bXNlY3NfdG9famlmZmllcygxMDApXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVFxcdG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUylcXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfdWFydCB7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCBwc2U7XFxuK1xcdHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXY7XFxuK1xcdHN0cnVjdCBjb21wbGV0aW9uIHJ4X2RvbmU7XFxuK1xcdHNwaW5sb2NrX3QgcnhfbG9jaztcXHRcXHQvKiBwcm90ZWN0cyByeF9idWYgYW5kIHJ4X2xlbiAqL1xcbitcXHRzaXplX3QgcnhfbGVuO1xcbitcXHR1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSlcXG4rXFxuKy8qXFxuKyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlblxcbisgKiB0aGUgbmV4dCBfc2VuZCByZS1mcmFtZXMgZnJvbSByeF9sZW4gMC4gUmVzeW5jIHdvcmtzIGJ5IHJldHVybmluZyBjb3VudFxcbisgKiAobm90IHRha2UpLCBkcm9wcGluZyBhbnkgb3ZlcmZsb3cgc28gc2VyZGV2IGtlZXBzIG5vIGxlZnRvdmVyIHRvIGJsZWVkXFxuKyAqIGludG8gdGhlIG5leHQgZnJhbWUuXFxuKyAqL1xcbitzdGF0aWMgc2l6ZV90IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7XFxuK1xcdHNpemVfdCB0YWtlO1xcbitcXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2xvY2spIHtcXG4rXFx0XFx0dGFrZSA9IG1pbihjb3VudCwgc2l6ZW9mKGN0eC1cXHUwMDNlcnhfYnVmKSAtIGN0eC1cXHUwMDNlcnhfbGVuKTtcXG4rXFx0XFx0aWYgKHRha2UpIHtcXG4rXFx0XFx0XFx0bWVtY3B5KGN0eC1cXHUwMDNlcnhfYnVmICsgY3R4LVxcdTAwM2VyeF9sZW4sIGJ1ZiwgdGFrZSk7XFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlcnhfbGVuICs9IHRha2U7XFxuK1xcdFxcdFxcdGlmIChjdHgtXFx1MDAzZXJ4X2xlbiA9PSBzaXplb2YoY3R4LVxcdTAwM2VyeF9idWYpKVxcbitcXHRcXHRcXHRcXHRjb21wbGV0ZShcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBjb25zdW1lIGFsbCB0byBhdm9pZCBkZXN5bmMvbWlzYWxpZ25tZW50ICovXFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0ge1xcbitcXHQucmVjZWl2ZV9idWYgPSBydHBzZV9tY3VfdWFydF9yZWNlaXZlLFxcbitcXHQud3JpdGVfd2FrZXVwID0gc2VyZGV2X2RldmljZV93cml0ZV93YWtldXAsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xcbitcXHRpbnQgd3JpdHRlbjtcXG4rXFxuK1xcdC8qIGNsZWFyIGFueSBsZWZ0b3ZlciByeCBzdGF0ZSBiZWZvcmUgdHJhbnNtaXR0aW5nICovXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKSB7XFxuK1xcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2RvbmUpO1xcbitcXHRcXHRjdHgtXFx1MDAzZXJ4X2xlbiA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXR0ZW4gPSBzZXJkZXZfZGV2aWNlX3dyaXRlKGN0eC1cXHUwMDNlc2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7XFxuK1xcdGlmICh3cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHdyaXR0ZW47XFxuK1xcdGlmICh3cml0dGVuICE9IHNpemVvZigqcmVxKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcXG4rXFxuK1xcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2RvbmUsIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVQpKVxcbitcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKSB7XFxuK1xcdFxcdGlmIChjdHgtXFx1MDAzZXJ4X2xlbiAhPSBzaXplb2YoKnJlc3ApKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdFxcdG1lbWNweShyZXNwLCBjdHgtXFx1MDAzZXJ4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcyA9IHtcXG4rXFx0LnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLFxcbitcXHQucmVjdiA9IHJ0cHNlX21jdV91YXJ0X3JlY3YsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXFxuK3tcXG4rXFx0dTMyIHNwZWVkID0gUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2c2VyZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Y3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjdHgpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VzZXJkZXYgPSBzZXJkZXY7XFxuK1xcdGN0eC1cXHUwMDNlcHNlLmRldiA9IGRldjtcXG4rXFx0Y3R4LVxcdTAwM2Vwc2UucGNkZXYub3duZXIgPSBUSElTX01PRFVMRTtcXG4rXFx0Y3R4LVxcdTAwM2Vwc2UudHJhbnNwb3J0ID0gXFx1MDAyNnJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHM7XFxuK1xcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jayk7XFxuK1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9kcnZkYXRhKHNlcmRldiwgY3R4KTtcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsIFxcdTAwMjZydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fc2VyZGV2X2RldmljZV9vcGVuKGRldiwgc2VyZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gb3BlbiBzZXJkZXZcXFxcblxcXCIpO1xcbitcXG4rXFx0Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgXFxcImN1cnJlbnQtc3BlZWRcXFwiLCBcXHUwMDI2c3BlZWQpO1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIHNwZWVkKTtcXG4rXFx0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpO1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpO1xcbitcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcihcXHUwMDI2Y3R4LVxcdTAwM2Vwc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4xXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X2dlbjFfZGF0YSB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscHNlLW1jdS1nZW4yXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxcbitcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7XFxuK1xcdC5kcml2ZXIgPSB7XFxuK1xcdFxcdC5uYW1lID0gXFxcInJlYWx0ZWstcHNlLW1jdS11YXJ0XFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXFxuK1xcdH0sXFxuK1xcdC5wcm9iZSAgPSBydHBzZV9tY3VfdWFydF9wcm9iZSxcXG4rfTtcXG4rbW9kdWxlX3NlcmRldl9kZXZpY2VfZHJpdmVyKHJ0cHNlX21jdV91YXJ0X2RyaXZlcik7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKb25hcyBKZWxvbmVrIFxcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmggYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOWE2ZGEyYzhmMzdkOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmhcXG5AQCAtMCwwICsxLDkwIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuK1xcbisjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxcbisjZGVmaW5lIF9SRUFMVEVLX1BTRV9NQ1VfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rLypcXG4rICogVGltZSB0aGUgTUNVIGl0c2VsZiBuZWVkcyBiZXR3ZWVuIGFjY2VwdGluZyBhIHJlcXVlc3QgYW5kIGhhdmluZyBhXFxuKyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXFxuKyAqIHVuZGVybHlpbmcgdHJhbnNwb3J0OiB0aGUgY29yZSBwYWNlcyB0cmFuc2FjdGlvbnMgYnkgUlRQU0VfTUNVX1JFU1BPTlNFX01TXFxuKyAqIGFuZCBib3RoIHRyYW5zcG9ydHMgc2l6ZSB0aGVpciBwZXItdHJhbnNhY3Rpb24gcmVjdiBjZWlsaW5nIGZyb21cXG4rICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xcbisgKiBuZWVkaW5nIHVwIHRvIH4xcyB0byBwcm9kdWNlIGEgcmVwbHkuXFxuKyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1xcdFxcdFxcdDI1XFxuKyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NU1xcdFxcdDEwMDBcXG4rXFxuKy8qXFxuKyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2VcXG4rICogYmV0d2VlbiBhdHRlbXB0cy4gUmlnaHQgYWZ0ZXIgZW5hYmxlLWdwaW9zIGlzIGFzc2VydGVkIHRoZSBNQ1UgbWF5IG5vdFxcbisgKiBhbnN3ZXIgb24gdGhlIGJ1cyB5ZXQ7IGdpdmUgaXQgYSBib3VuZGVkIHdpbmRvdyB0byBjb21lIHVwIGJlZm9yZVxcbisgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NU1xcdFxcdDMwMDBcXG4rI2RlZmluZSBSVFBTRV9NQ1VfQk9PVF9SRVRSWV9NU1xcdFxcdFxcdDEwMFxcbitcXG4rI2RlZmluZSBSVFBTRV9NQ1VfTVNHX1NJWkVcXHRcXHRcXHQxMlxcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9tc2cge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHNlcV9udW07XFxuK1xcdHU4IHBheWxvYWRbOV07XFxuK1xcdHU4IGNoZWNrc3VtO1xcbit9IF9fcGFja2VkO1xcbitcXG4rLypcXG4rICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBCQ00gZGlhbGVjdDsgUlRMIG5ldmVyIGVtaXRzIHRoZW0pLlxcbisgKiBJTkNPTVBMRVRFL0JBRF9DU1VNIGFyZSB0ZXJtaW5hbDsgTk9UX1JFQURZIGlzIHRyYW5zaWVudC5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXFx0XFx0MHhmZFxcdC8qIC1FQkFERSAgICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTVxcdFxcdDB4ZmVcXHQvKiAtRUJBRE1TRyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZXFx0XFx0MHhmZlxcdC8qIC1FQUdBSU4gICovXFxuK1xcbisvKiBBIHBvbGxpbmcgdHJhbnNwb3J0IGNhbiBzdG9wIGhlcmU6IHRoZSBtYXRjaGluZyByZXBseSwgb3IgYSB0ZXJtaW5hbCBlcnJvci4gKi9cXG4rc3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHJldHVybiByZXNwLVxcdTAwM2VvcGNvZGUgPT0gcmVxLVxcdTAwM2VvcGNvZGUgfHxcXG4rXFx0ICAgICAgIHJlc3AtXFx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHxcXG4rXFx0ICAgICAgIHJlc3AtXFx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNO1xcbit9XFxuK1xcbisvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovXFxuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdDtcXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm87XFxuK3N0cnVjdCBydHBzZV9tY3VfY3RybDtcXG4rXFxuKy8qIFBlci1jb21wYXRpYmxlIG1hdGNoIGRhdGEgKHRoZSBvZl9tYXRjaCAuZGF0YSkuICovXFxuK3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcXG4rXFx0Ym9vbCBuYXRpdmVfaTJjO1xcdC8qIHJhdy1JMkMgZnJhbWluZyAodnMgU01CdXMpOyBJMkMgdHJhbnNwb3J0IG9ubHkgKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyB7XFxuK1xcdGludCAoKnNlbmQpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKTtcXG4rXFx0aW50ICgqcmVjdikoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XFxuK1xcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi9cXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7XFxuK1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICpwb2Vfc3VwcGx5O1xcbit9O1xcbitcXG4raW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7XFxuK1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGE7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YTtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YTtcXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjo0MjoyNi4wMDI4OTQzNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjMxNDY5NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9JMkNcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9VQVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9lbmFibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2Rpc2FibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV9kb194ZmVyXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmRcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfc21idXNfcmVjdlwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZFwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdlwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcmVjZWl2ZVwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfc2VuZFwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcmVjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdmlhIEkyQyBvciBVQVJULiBJdCBpbXBsZW1lbnRzIHRoZSBldGh0b29sIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBQU0Ugb3BlcmF0aW9ucyBhbmQgdGhlIHRyYW5zcG9ydCBsYXllciBpbXBsZW1lbnRhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGY0OGY0YmZjZGZhMzBlNTI3ZGVmNDRkYWEyZmZhOWQ3YWM5ZGYxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE2OjQyOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MzMzMDYxOTNkYjU3ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LnlhbWxcbkBAIC0wLDAgKzEsMTc2IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBSZWFsdGVrIFBTRSBNQ1VcbitcbittYWludGFpbmVyczpcbisgIC0gSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBBIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IG1hbmFnZXMgdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KVxuKyAgaGFyZHdhcmUgb24gYSByYW5nZSBvZiBtYW5hZ2VkIFBvRSBzd2l0Y2hlcy4gVGhlIGhvc3QgQ1BVIHRhbGtzIG9ubHkgdG9cbisgIHRoaXMgTUNVIC0gb3ZlciBJMkMvU01CdXMgb3IgVUFSVCAtIHVzaW5nIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDtcbisgIHRoZSBQU0Ugc2lsaWNvbiBpdCBkcml2ZXMgc2l0cyBiZWhpbmQgdGhlIE1DVSBhbmQgaXMgbmV2ZXIgYWNjZXNzZWRcbisgIGRpcmVjdGx5LiBGb3IgZXhhbXBsZSwgb24gdGhlIFp5eGVsIEdTMTkwMC0xMEhQIHRoZSBTb0MgcmVhY2hlcyB0aGUgTUNVXG4rICBvdmVyIFVBUlQsIGFuZCB0aGUgTUNVIG1hbmFnZXMgdGhlIG9uLWJvYXJkIFBTRSBjaGlwLlxuK1xuKyAgVGhpcyBiaW5kaW5nIGRlc2NyaWJlcyB0aGUgTUNVIHRvZ2V0aGVyIHdpdGggaXRzIFJlYWx0ZWsgZmlybXdhcmU6IHRoZVxuKyAgZmlybXdhcmUgYW5kIGl0cyBob3N0IHByb3RvY29sLCB3aGljaCBhcmUgc3RhYmxlIGFjcm9zcyBib2FyZHMuIFRoZVxuKyAgbWljcm9jb250cm9sbGVyIHNpbGljb24gaXMgYSBnZW5lcmFsLXB1cnBvc2UgcGFydCB0aGF0IHZhcmllcywgYW5kIHRoZVxuKyAgUFNFIHNpbGljb24gYmVoaW5kIHRoZSBNQ1UgKFJlYWx0ZWsgUlRMODIzeC9SVEw4MjM5KiBvciBCcm9hZGNvbVxuKyAgQkNNNTl4eHgpIGlzIHJlcG9ydGVkIGJ5IHRoZSBNQ1UgYW5kIGRldGVjdGVkIGF0IHJ1bnRpbWUgLSBuZWl0aGVyIGlzXG4rICBuYW1lZCBoZXJlLlxuK1xuKyAgVHdvIHByb3RvY29sIGdlbmVyYXRpb25zIGV4aXN0LCBib3RoIFJlYWx0ZWsnczpcbisgICAgZ2VuMSAgb2xkZXIgYm9hcmRzLCB3aGVyZSB0aGUgTUNVIGZyb250cyBCcm9hZGNvbSBQU0Ugc2lsaWNvblxuKyAgICBnZW4yICB0aGUgYWx0ZXJlZCBwcm90b2NvbCB1c2VkIHdpdGggUmVhbHRlaydzIG93biBQU0Ugc2lsaWNvblxuK1xuKyAgT24gYW4gSTJDIGF0dGFjaG1lbnQgdGhlIGZyYW1pbmcgdGhlIE1DVSBmaXJtd2FyZSBleHBlY3RzIGlzIHBhcnQgb2YgdGhlXG4rICBjb21wYXRpYmxlOiAnLXNtYnVzJyAocmVhZHMgY2FycnkgYSBsZWFkaW5nIGNvbW1hbmQgYnl0ZSBhbmQgYSByZXBlYXRlZFxuKyAgc3RhcnQpIG9yICctaTJjJyAoYmFyZSBibG9jayB3cml0ZXMgYW5kIHJlYWRzKS4gQSBVQVJUIGF0dGFjaG1lbnQgY2Fycmllc1xuKyAgbm8gZnJhbWluZyBzdWZmaXg7IHRoZSB0cmFuc3BvcnQgaXMgZ2l2ZW4gYnkgdGhlIHBhcmVudCAnc2VyaWFsJyBub2RlLlxuK1xuKyAgRWFjaCBib2FyZCBhZGRpdGlvbmFsbHkgY2FycmllcyBhIGRldmljZS1zcGVjaWZpYyBjb21wYXRpYmxlIHRoYXQgZmFsbHNcbisgIGJhY2sgdG8gb25lIG9mIHRoZSBwcm90b2NvbCBjb21wYXRpYmxlcyBhYm92ZS4gRHJpdmVycyBiaW5kIG9uIHRoZVxuKyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kXG4rICByZXNlcnZlcyBhIHBsYWNlIGZvciBhIGZ1dHVyZSBwZXItYm9hcmQgcXVpcmsgd2l0aG91dCBoYXZpbmcgdG8gcmV0cm9maXRcbisgIGRldmljZSB0cmVlcyBhbHJlYWR5IGluIHRoZSBmaWVsZC5cbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgb25lT2Y6XG4rICAgICAgIyBVQVJUXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjFcbitcbisgICAgICAjIEkyQywgU01CdXMgZnJhbWluZ1xuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTIwLTI0aHAtdjItcHNlXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4rXG4rICAgICAgIyBVQVJUXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1iMS1wc2VcbisgICAgICAgICAgICAgIC0genl4ZWwseG1nMTkxNS0xMGVwLXBzZVxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMlxuK1xuKyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSB6eXhlbCx4czE5MzAtMTJocC1wc2VcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcbitcbisgICAgICAjIEkyQywgcmF3IGZyYW1pbmdcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIGxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZVxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcbitcbisgIHJlZzpcbisgICAgbWF4SXRlbXM6IDFcbitcbisgIHBvd2VyLXN1cHBseTpcbisgICAgZGVzY3JpcHRpb246IFJlZ3VsYXRvciBzdXBwbHlpbmcgdGhlIFBvRSBwb3dlciByYWlsLlxuK1xuKyAgZW5hYmxlLWdwaW9zOlxuKyAgICBtYXhJdGVtczogMVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rXG4rYWxsT2Y6XG4rICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjXG4rICAtICRyZWY6IC9zY2hlbWFzL3NlcmlhbC9zZXJpYWwtcGVyaXBoZXJhbC1wcm9wcy55YW1sI1xuKyAgIyBBICctc21idXMnLyctaTJjJyBjb21wYXRpYmxlIGlzIGFuIEkyQyBhdHRhY2htZW50OiBpdCBoYXMgJ3JlZycgYW5kXG4rICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlRcbisgICMgYXR0YWNobWVudDogbm8gJ3JlZycsIHRoZSB0cmFuc3BvcnQgY29tZXMgZnJvbSB0aGUgcGFyZW50IHNlcmlhbCBub2RlLlxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29udGFpbnM6XG4rICAgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjEtc21idXNcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4rICAgIHRoZW46XG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIHJlZ1xuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjdXJyZW50LXNwZWVkOiBmYWxzZVxuKyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxuKyAgICBlbHNlOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICByZWc6IGZhbHNlXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgIyBTTUJ1cy1mcmFtZWQgSTJDIGF0dGFjaG1lbnRcbisgIC0gfFxuKyAgICBpMmMge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ6eXhlbCx4czE5MzAtMTJocC1wc2VcIiwgXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1wiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MjBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgcHNlLXBpcyB7XG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG4rXG4rICAjIFJhdy1JMkMtZnJhbWVkIGF0dGFjaG1lbnRcbisgIC0gfFxuKyAgICBpMmMge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcIiwgXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MweDIwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgIHBzZS1waXMge1xuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICB9O1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuK1xuKyAgIyBVQVJUIGF0dGFjaG1lbnRcbisgIC0gfFxuKyAgICBzZXJpYWwge1xuKyAgICAgICAgZXRoZXJuZXQtcHNlIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcIiwgXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMVwiO1xuKyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSBcdTAwM2MxOTIwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBwc2UtcGlzIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uM2IyMWU0NmJlNjhhMWYgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMjcxNiw2ICsyMjcxNiwxMyBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHRpbmNsdWRlL3NvdW5kL3J0Ki5oXG4gRjpcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXG4gXG4rUkVBTFRFSyBQU0UgTUNVIERSSVZFUlxuK006XHRKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuK1xuIFJFQUxURUsgT1RUTyBXQVRDSERPR1xuIE06XHRTYW5kZXIgVmFuaGV1bGUgXHUwMDNjc2FuZGVyQHN2YW5oZXVsZS5uZXRcdTAwM2VcbiBMOlx0bGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuaW5kZXggN2VmMjk2NTdlZTVkZDEuLmEwZjJhZTY2OGM2N2M4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuIFxuIGlmIFBTRV9DT05UUk9MTEVSXG4gXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVVxuK1x0dHJpc3RhdGVcbitcdGhlbHBcbitcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzIHNlbGVjdGVkXG4rXHQgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4rXHR0cmlzdGF0ZSBcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCJcbitcdGRlcGVuZHMgb24gSTJDXG4rXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4rXHRoZWxwXG4rXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4rXHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxuK1x0ICB2aWEgSTJDL1NNQnVzLiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsXG4rXHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXG4rXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfVUFSVFxuK1x0dHJpc3RhdGUgXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcIlxuK1x0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xuK1x0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuK1x0aGVscFxuK1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuK1x0ICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWRcbitcdCAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFXG4rXHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbitcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LlxuK1xuIGNvbmZpZyBQU0VfUkVHVUxBVE9SXG4gXHR0cmlzdGF0ZSBcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwiXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG5pbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuQEAgLTMsNiArMyw5IEBAXG4gXG4gb2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXG4gXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVSkgKz0gcmVhbHRlay1wc2UtbWN1LWNvcmUub1xuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSArPSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX1VBUlQpICs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgKz0gcHNlX3JlZ3VsYXRvci5vXG4gb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSArPSBwZDY5MngwLm9cbiBvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBhNWJiNzg0MzYwYTVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xuQEAgLTAsMCArMSw5OTMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXNcbisgKiBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMuIFRoZSBNQ1Ugc3BlYWtzIGEgMTItYnl0ZSBmaXhlZC1mcmFtZVxuKyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlXG4rICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLlxuKyAqXG4rICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGVcbisgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yXG4rICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVXG4rICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbC4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3RcbisgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxuKyAqXG4rICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLlxuKyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmVcbisgKiB0aGUgTUNVIGZyb250cyBhbmQgbWFuYWdlcyBCcm9hZGNvbSBQU0Ugc2lsaWNvbjsgR2VuMiBiZWluZyB1c2VkIHdpdGhcbisgKiBSZWFsdGVrIFBTRSBzaWxpY29uLiBUaGUgdHdvIHNoYXJlIGZyYW1lIGZvcm1hdCBhbmQgYSBzdW0tbW9kLTI1NlxuKyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzO1xuKyAqIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuXG4rICpcbisgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcbisgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sXG4rICogZmFtaWx5LCBhbmQgXCJkdW1iIFBTRVwiIG1vZGVzIHdoZXJlIG5vIGhvc3QgY29udHJvbCBpcyB3aXJlZCB1cCBhdCBhbGwuXG4rICpcbisgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1VcbisgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlc1xuKyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2XG4rICogY2FsbGJhY2tzLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInJlYWx0ZWstcHNlLW1jdS5oXCJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcdFx0MHgwMTM4XG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcdFx0MHgwMDM5XG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDXHRcdDB4MDEzOVxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVx0XHQweGUxMTFcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcdFx0MHhlMTIxXG4rXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRURcdFx0MHgwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1x0XHQweDAxXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklOR1x0XHQweDAyXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVFx0XHRcdDB4MDNcdC8qIEdlbjEtb25seTsgcmVzZXJ2ZWQgb24gR2VuMiAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUXHRcdDB4MDRcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVFx0XHQweDA1XHQvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HXHRcdDB4MDZcbitcbisvKiBSVFBTRV9NQ1VfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSB2YWx1ZXMgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlx0MHgwMlxuK1xuKyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUU1x0XHRcdDQ4XG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFlcdFx0M1xuK1xuK2VudW0gcnRwc2VfbWN1X2NtZCB7XG4rXHRSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsXG4rXHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcbitcdFJUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUcsXG4rXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFLFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFLFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUUyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHLFxuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxuK1xuK1x0UlRQU0VfTUNVX05VTV9DTURTLFxuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUge1xuK1x0dTggb3A7XG4rXHRib29sIHZhbGlkO1xuK307XG4rXG4rLyogU2hvcnRoYW5kIGZvciB0aGUgZGVzaWduYXRlZC1pbml0aWFsaXplciBlbnRyaWVzIGluIGRpYWxlY3Qgb3Bjb2RlIHRhYmxlcy4gKi9cbisjZGVmaW5lIFJUUFNFX01DVV9PUChvcGMpXHR7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH1cbitcbisvKiBQYXJzZWQgTUNVIHJlc3BvbnNlIHN0cnVjdHVyZXMgKGRlY29kZWQgZnJvbSBydHBzZV9tY3VfbXNnIHJlcGxpZXMpICovXG4rXG4rc3RydWN0IHJ0cHNlX21jdV9pbmZvIHtcbitcdHU4IG1heF9wb3J0cztcbitcdGJvb2wgc3lzdGVtX2VuYWJsZTtcbitcdHUxNiBkZXZpY2VfaWQ7XG4rXHR1OCBzd192ZXI7XG4rXHR1OCBtY3VfdHlwZTtcbitcdHU4IGNvbmZpZ19zdGF0dXM7XG4rXHR1OCBleHRfdmVyO1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcbitcdHU4IHV2bG87XG4rXHR1OCBvdmxvO1xuK1x0Ym9vbCBwcmVhbGxvY19lbmFibGU7XG4rXHR1OCBudW1fb2ZfcHNlcztcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMge1xuK1x0dTggc3RzMTtcbitcdHU4IHN0czI7XG4rXHR1OCBzdHMzO1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IHtcbitcdHUxNiB2b2x0YWdlX3JhdztcdC8qIDY0LjQ1bVYvTFNCICovXG4rXHR1MTYgY3VycmVudF9yYXc7XHQvKiAxbUEvTFNCICovXG4rXHR1MTYgdGVtcGVyYXR1cmVfcmF3O1x0LyogVChtQykgPSAxMjUwICogKDIyMCAtIHJhdykgKi9cbitcdHUxNiBwb3dlcl9yYXc7XHRcdC8qIDEwMG1XL0xTQiAqL1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XG4rXHRib29sIGVuYWJsZTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIHtcbitcdHU4IG1heF9wb3dlcjtcbitcdHU4IHByaW9yaXR5O1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcbitcdHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIG9wY29kZVtSVFBTRV9NQ1VfTlVNX0NNRFNdO1xuK1xuK1x0LypcbitcdCAqIFJlc3BvbnNlIHBhcnNlcnMgZm9yIHRoZSBmaWVsZHMgdGhhdCBkaWZmZXIgYmV0d2VlbiBkaWFsZWN0czsgZWFjaFxuK1x0ICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlXG4rXHQgKiBkZWNvZGVkIGRpcmVjdGx5IC0gYSBkaWFsZWN0IHRoYXQgZGl2ZXJnZXMgdGhlcmUgbXVzdCBhZGQgYSBob29rLFxuK1x0ICogYXMgYSBtaXNtYXRjaGVkIGxheW91dCBjYW5ub3QgYmUgZGV0ZWN0ZWQgKHRoZSBjaGVja3N1bSBzdGlsbCBwYXNzZXMpLlxuK1x0ICovXG4rXHR2b2lkICgqcGFyc2Vfc3lzdGVtX2luZm8pKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pO1xuK1x0aW50ICgqcGFyc2VfcG9ydF9jbGFzcykoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKTtcbitcdGNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpO1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8ge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdHUxNiBkZXZpY2VfaWQ7XG4rXHR1MzIgbWF4X21XX3Blcl9wb3J0O1xuK1x0ZW51bSBydHBzZV9tY3VfY21kIHB3X3NldF9jbWQ7XHQvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovXG4rXHR1MzIgcHdfc2V0X2xzYl9tVztcdFx0LyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovXG4rXHR1MzIgcHdfcmVhZF9sc2JfbVc7XHRcdC8qIExTQiBvZiBleHRfY29uZmlnLm1heF9wb3dlciByZWFkLWJhY2ssIGluIG1XICovXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOGJfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuK1x0Lm5hbWUgPSBcIlJUTDgyMzhCXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XG4rXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5LFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuK1x0Lm5hbWUgPSBcIlJUTDgyMzlcIixcbitcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbitcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDQwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5Y19pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXG4rXHQubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsXG4rXHQubmFtZSA9IFwiUlRMODIzOUNcIixcbitcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbitcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDQwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTExMV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsXG4rXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXG4rXHQubmFtZSA9IFwiQkNNNTkxMTFcIixcbitcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbitcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbitcdC5wd19zZXRfbHNiX21XID0gMjAwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XG4rXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMSxcbitcdC8qXG4rXHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxuK1x0ICogYW5kIHRoZSBCQ00gZGlhbGVjdCBoYXMgb25seSB0aGUgOC1iaXQvMC4yVyBzZXQgY29tbWFuZCAoXHUwMDNjPTUxVyk7XG4rXHQgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLlxuK1x0ICovXG4rXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXG4rXHQubmFtZSA9IFwiQkNNNTkxMjFcIixcbitcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbitcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbitcdC5wd19zZXRfbHNiX21XID0gMjAwLFxuK307XG4rXG4rLyogSGVscGVycyBhbmQgYmFzaWMgZnVuY3Rpb25zICovXG4rXG4rc3RhdGljIHN0cnVjdCBydHBzZV9tY3VfY3RybCAqdG9fcnRwc2VfbWN1X2N0cmwoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4re1xuK1x0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXG4re1xuK1x0bWVtc2V0KG1zZywgMHhmZiwgc2l6ZW9mKCptc2cpKTtcbitcdG1zZy1cdTAwM2VvcGNvZGUgPSBvcGNvZGU7XG4rfVxuK1xuK3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHR1OCBzdW0gPSAwO1xuK1xuK1x0d2hpbGUgKGxlbi0tKVxuK1x0XHRzdW0gKz0gKmJ1ZisrO1xuK1x0cmV0dXJuIHN1bTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZG9feGZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXEtXHUwMDNlY2hlY2tzdW0gPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVxLCBSVFBTRV9NQ1VfTVNHX1NJWkUgLSAxKTtcbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KSB7XG4rXHRcdHJldCA9IHBzZS1cdTAwM2V0cmFuc3BvcnQtXHUwMDNlc2VuZChwc2UsIHJlcSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LypcbitcdFx0ICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdFxuK1x0XHQgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0b1xuK1x0XHQgKiB1cy4gUGFjZSB0aGUgdHJhbnNhY3Rpb24gaGVyZSBzbyBlYWNoIHRyYW5zcG9ydCBjYW4ga2VlcCBpdHMgcmVjdlxuK1x0XHQgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS5cbitcdFx0ICovXG4rXHRcdG1zbGVlcChSVFBTRV9NQ1VfUkVTUE9OU0VfTVMpO1xuK1xuK1x0XHRtZW1zZXQocmVzcCwgMCwgc2l6ZW9mKCpyZXNwKSk7XG4rXHRcdHJldCA9IHBzZS1cdTAwM2V0cmFuc3BvcnQtXHUwMDNlcmVjdihwc2UsIHJlcSwgcmVzcCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBFeHBsaWNpdCBNQ1UgZXJyb3Igb3Bjb2RlcyAob2JzZXJ2ZWQgb24gdGhlIEJDTSBkaWFsZWN0OyBoYXJtbGVzc1xuK1x0ICogdG8gY2hlY2sgZm9yIFJUTCB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQ1xuK1x0ICogbWlzbWF0Y2ggcGF0aCBzbyBjYWxsZXJzIHNlZSBhIG1lYW5pbmdmdWwgZXJybm8uXG4rXHQgKi9cbitcdHN3aXRjaCAocmVzcC1cdTAwM2VvcGNvZGUpIHtcbitcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFOlxuK1x0XHRyZXR1cm4gLUVCQURFO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOlxuK1x0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcbitcdGlmIChyZXNwLVx1MDAzZW9wY29kZSAhPSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4rXHQgICAgcmVzcC1cdTAwM2VzZXFfbnVtICE9IHJlcS1cdTAwM2VzZXFfbnVtIHx8XG4rXHQgICAgcmVzcC1cdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXG4rXHRcdHJldHVybiAtRUJBRE1TRztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxuK1x0XHRcdFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xuK1x0aW50IHJldDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4rXHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgcmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJlc3AtXHUwMDNlcGF5bG9hZFswXSAhPSBwb3J0KVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuK1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuK1x0cmVxLnBheWxvYWRbMV0gPSBhcmc7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJlc3AucGF5bG9hZFswXSAhPSBwb3J0IHx8IHJlc3AucGF5bG9hZFsxXSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBHbG9iYWwgb3BlcmF0aW9ucyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9pbmZvKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnICpjb25maWcpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbitcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRjb25maWctXHUwMDNldXZsbyA9IHJlc3AucGF5bG9hZFswXTtcbitcdGNvbmZpZy1cdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xuK1x0Y29uZmlnLVx1MDAzZXByZWFsbG9jX2VuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMHgxKTtcbitcdGNvbmZpZy1cdTAwM2VudW1fb2ZfcHNlcyA9IHJlc3AucGF5bG9hZFs2XTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XG4rfVxuK1xuKy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdGF0dXMtXHUwMDNlc3RzMSA9IHJlc3AucGF5bG9hZFsxXTtcbitcdHN0YXR1cy1cdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xuK1x0c3RhdHVzLVx1MDAzZXN0czMgPSByZXNwLnBheWxvYWRbM107XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRtZWFzdXJlbWVudC1cdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNlY3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzNdKTtcbitcdG1lYXN1cmVtZW50LVx1MDAzZXRlbXBlcmF0dXJlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbNV0pO1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGNvbmZpZy1cdTAwM2VlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Y29uZmlnLVx1MDAzZW1heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTtcbitcdGNvbmZpZy1cdTAwM2Vwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV07XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcbit9XG4rXG4rLyogUFNFIGNvbnRyb2xsZXIgb3BzICovXG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRhZG1pbl9zdGF0ZS1cdTAwM2VjMzNfYWRtaW5fc3RhdGUgPSBjb25maWcuZW5hYmxlID8gRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQgOlxuK1x0XHRcdFx0XHRcdCAgICAgICBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4rXHRcdFx0XHRcdHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ERUxJVkVSSU5HO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1RFU1Q7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19PVEhFUkZBVUxUO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1VOS05PV047XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LypcbitcdCAqIHN0czIgaG9sZHMgdGhlIGNsYXNzIG9ubHkgaW4gdGhlIG9wZXJhdGlvbmFsIHN0YXRlcyBiZWxvdy4gSW4gYVxuK1x0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XG4rXHQgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpc1xuK1x0ICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHJlYWwgY2xhc3MtMCBQRDsgdXNlcnNwYWNlIGRpc2FtYmlndWF0ZXNcbitcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxuK1x0ICovXG4rXHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuK1x0XHRyZXR1cm4gcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyhcdTAwMjZzdGF0dXMpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcdTAwMjZtZWFzdXJlbWVudCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogMTAwbVcgcGVyIExTQiAqL1xuK1x0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbitcdGludCByZXQ7XG4rXHR1MzIgdVY7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDY0LjQ1bVYgcGVyIExTQiAqL1xuK1x0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcbitcdHJldHVybiBtaW5fdCh1MzIsIHVWLCBJTlRfTUFYKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVx1MDAzZWNoaXAtXHUwMDNlcHdfcmVhZF9sc2JfbVc7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXAgPSBwc2UtXHUwMDNlY2hpcDtcbitcdHU4IHByZ192YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKG1heF9tVyBcdTAwM2MgMCB8fCBtYXhfbVcgXHUwMDNlIGNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0KVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdHR5cGVfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07XG4rXHR2YWxfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW2NoaXAtXHUwMDNlcHdfc2V0X2NtZF07XG4rXHQvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovXG4rXHRpZiAoIXR5cGVfb3BjLVx1MDAzZXZhbGlkIHx8ICF2YWxfb3BjLVx1MDAzZXZhbGlkIHx8ICFjaGlwLVx1MDAzZXB3X3NldF9sc2JfbVcpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcbitcdCAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpblxuK1x0ICogdXNlci1kZWZpbmVkIG1vZGUgYnV0IHdpdGggdGhlIHByZXZpb3VzIGxpbWl0IHZhbHVlOyB0aGUgbmV4dFxuK1x0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cbitcdCAqL1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHR5cGVfb3BjLVx1MDAzZW9wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdmFsX29wYy1cdTAwM2VvcCwgcHJnX3ZhbCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XG4rXG4rXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJhbmdlWzBdLm1pbiA9IDA7XG4rXHRyYW5nZVswXS5tYXggPSBwc2UtXHUwMDNlY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQ7XG4rXG4rXHRvdXQtXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBjb25maWcucHJpb3JpdHk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1xuK1x0aWYgKHByaW8gXHUwMDNlIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCBvcGMtXHUwMDNlb3AsIHByaW8pO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0ge1xuK1x0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcbitcdC5waV9nZXRfcHdfc3RhdHVzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyxcbitcdC5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsXG4rXHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXG4rXHQucGlfZW5hYmxlID0gcnRwc2VfbWN1X3BvcnRfZW5hYmxlLFxuK1x0LnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLFxuK1x0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXG4rXHQucGlfZ2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0LFxuK1x0LnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCxcbitcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcbitcdC5waV9nZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvLFxuK1x0LnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnO1xuK1x0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXG4rXHQgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGFcbitcdCAqIGNvcnJ1cHQvcGFydGlhbCBmcmFtZSAoLUVCQURNU0cgLyAtRUJBREUpLiBSZXRyeSB0aG9zZSB3aXRoaW4gYVxuK1x0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXG4rXHQgKiBpbW1lZGlhdGVseS5cbitcdCAqL1xuK1x0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTtcbitcdGRvIHtcbitcdFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XG4rXHRcdGlmIChyZXQgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTlhJTyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FUkVNT1RFSU8gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQkFETVNHIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVCQURFKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRtc2xlZXAoUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMpO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCJmYWlsZWQgdG8gcmVhZCBNQ1UgaW5mb1xcblwiKTtcbitcbitcdHN3aXRjaCAoaW5mby1cdTAwM2VkZXZpY2VfaWQpIHtcbitcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcbitcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM4Yl9pbmZvO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzlfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOWNfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMTFfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMjFfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLCBcInVua25vd24gUFNFIGlkIDB4JXhcXG5cIixcbitcdFx0XHRcdCAgICAgaW5mby1cdTAwM2VkZXZpY2VfaWQpO1xuK1x0fVxuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZW1heF9wb3J0cyB8fCBpbmZvLVx1MDAzZW1heF9wb3J0cyBcdTAwM2UgUlRQU0VfTUNVX01BWF9QT1JUUylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICAgXCJNQ1UgcmVwb3J0cyBpbnZhbGlkIHBvcnQgY291bnQgJXVcXG5cIiwgaW5mby1cdTAwM2VtYXhfcG9ydHMpO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgXHUwMDI2ZXh0X2NvbmZpZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwiZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcXG5cIik7XG4rXG4rXHRkZXZfaW5mbyhwc2UtXHUwMDNlZGV2LCBcIiVzIE1DVSwgJXMgKGlkIDB4JTA0eCksICV1IHBvcnRzIGFjcm9zcyAldSBQU0UgY2hpcChzKVxcblwiLFxuK1x0XHQgcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKGluZm8tXHUwMDNlbWN1X3R5cGUpLCBwc2UtXHUwMDNlY2hpcC1cdTAwM2VuYW1lLFxuK1x0XHQgaW5mby1cdTAwM2VkZXZpY2VfaWQsIGluZm8tXHUwMDNlbWF4X3BvcnRzLCBleHRfY29uZmlnLm51bV9vZl9wc2VzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSlcbit7XG4rXHRyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSBkYXRhO1xuK1xuK1x0cnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7XG4rfVxuK1xuK2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbitcdHN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9pbmZvIGluZm87XG4rXHRpbnQgcmV0O1xuK1xuK1x0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcnRwc2VfbWN1X21zZykgIT0gUlRQU0VfTUNVX01TR19TSVpFKTtcbitcbitcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlbXV0ZXgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS1cdTAwM2VkZXYpO1xuK1x0aWYgKCFtYXRjaClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVOT0RFViwgXCJtaXNzaW5nIG1hdGNoIGRhdGFcXG5cIik7XG4rXHRwc2UtXHUwMDNlZGlhbGVjdCA9IG1hdGNoLVx1MDAzZWRpYWxlY3Q7XG4rXG4rXHQvKlxuK1x0ICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0XG4rXHQgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJ2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLlxuK1x0ICovXG4rXHRpZiAoIXBzZS1cdTAwM2VkaWFsZWN0IHx8XG4rXHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvIHx8XG4rXHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MgfHxcbitcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgICBcImRpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxcblwiKTtcbitcbitcdHBzZS1cdTAwM2Vwb2Vfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KHBzZS1cdTAwM2VkZXYsIFwicG93ZXJcIik7XG4rXHRpZiAoSVNfRVJSKHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgUFRSX0VSUihwc2UtXHUwMDNlcG9lX3N1cHBseSksXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBQb0Ugc3VwcGx5XFxuXCIpO1xuK1xuK1x0ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXHUwMDNlZGV2LCBcImVuYWJsZVwiLCBHUElPRF9PVVRfSElHSCk7XG4rXHRpZiAoSVNfRVJSKGVuYWJsZV9ncGlvKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgUFRSX0VSUihlbmFibGVfZ3BpbyksXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3Bpb1xcblwiKTtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsIFx1MDAyNmluZm8pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHNlLVx1MDAzZXBvZV9zdXBwbHkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgcmV0LCBcImZhaWxlZCB0byBlbmFibGUgUG9FIHN1cHBseVxcblwiKTtcbitcbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwc2UtXHUwMDNlZGV2LCBydHBzZV9tY3VfcmVndWxhdG9yX2Rpc2FibGUsIHBzZS1cdTAwM2Vwb2Vfc3VwcGx5KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkge1xuK1x0XHRyZXQgPSBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIHRydWUpO1xuK1x0XHQvKiBEaWFsZWN0cyB3aXRob3V0IGEgZ2xvYmFsLXN0YXRlIGNvbmNlcHQgKGUuZy4gQkNNKSByZXR1cm5cbitcdFx0ICogLUVPUE5PVFNVUFA7IHRyZWF0IHRoYXQgYXMgXCJubyBzZXBhcmF0ZSBlbmFibGUgcmVxdWlyZWRcIi5cbitcdFx0ICovXG4rXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cXG5cIik7XG4rXHRcdGlmICghcmV0KSB7XG4rXHRcdFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSwgcHNlKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LypcbitcdCAqIERlcGVuZGluZyBvbiB0aGUgTUNVIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gKHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudFxuK1x0ICogZm9yIGV2ZXJ5IGJvYXJkKSwgaXQgaXNuJ3Qga25vd24gd2hldGhlciB0aGUgUG9FIHN1YnN5c3RlbSBpcyBhY3RpdmUgb3JcbitcdCAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyXG4rXHQgKiBwb3dlciB0byBQRHMgd2l0aG91dCBhbnkgZXhwbGljaXQgZW5hYmxlLlxuK1x0ICovXG4rXG4rXHQvKiBwY2Rldi5vd25lciBpcyBzZXQgYnkgdGhlIHRyYW5zcG9ydCwgc28gdGhlIHJlZ2lzdGVyZWQgY29udHJvbGxlclxuK1x0ICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuXG4rXHQgKi9cbitcdHBzZS1cdTAwM2VwY2Rldi5vcHMgICAgICA9IFx1MDAyNnJ0cHNlX21jdV9vcHM7XG4rXHRwc2UtXHUwMDNlcGNkZXYuZGV2ICAgICAgPSBwc2UtXHUwMDNlZGV2O1xuK1x0cHNlLVx1MDAzZXBjZGV2LnR5cGVzICAgID0gRVRIVE9PTF9QU0VfQzMzO1xuK1x0cHNlLVx1MDAzZXBjZGV2Lm5yX2xpbmVzID0gaW5mby5tYXhfcG9ydHM7XG4rXHRwc2UtXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZO1xuK1x0cHNlLVx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDO1xuK1xuK1x0cmV0dXJuIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocHNlLVx1MDAzZWRldiwgXHUwMDI2cHNlLVx1MDAzZXBjZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X3JlZ2lzdGVyKTtcbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbitcdGluZm8tXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XG4rXHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbitcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbitcdGluZm8tXHUwMDNlbWN1X3R5cGUgPSBwYXlsb2FkWzZdO1xuK1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbitcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXG4re1xuK1x0LyogQ2xhc3MgbGl2ZXMgaW4gdGhlIHVwcGVyIG5pYmJsZSBvZiBzdHMyLiAqL1xuK1x0cmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtXHUwMDNlc3RzMik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfZ2VuMl9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKVxuK3tcbitcdHN3aXRjaCAobWN1X3R5cGUpIHtcbitcdGNhc2UgMHgwMDpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkYzMTBcIjtcbitcdGNhc2UgMHgwMTpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkYyMzBcIjtcbitcdGNhc2UgMHgwMjpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkYzMDNcIjtcbitcdGNhc2UgMHgwMzpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkYxMDNcIjtcbitcdGNhc2UgMHgwNDpcdHJldHVybiBcIkdpZ2FEZXZpY2UgR0QzMkUxMDNcIjtcbitcdGNhc2UgMHgxMDpcdHJldHVybiBcIk51dm90b24gTTA1MTZcIjtcbitcdGNhc2UgMHgxMTpcdHJldHVybiBcIk51dm90b24gTTA1NjRcIjtcbitcdGNhc2UgMHgxMjpcdHJldHVybiBcIk51dm90b24gTlVDMDI5XCI7XG4rXHRkZWZhdWx0Olx0cmV0dXJuIFwidW5rbm93blwiO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbitcdC8qIEJDTSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlXG4rXHQgKiBcInJlbW90ZSBlbmFibGVcIiBiaXQgaW4gdGhlIHN5c3RlbS1zdGF0dXMgZmxhZ3MgYXQgcGF5bG9hZFs3XS5cbitcdCAqL1xuK1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcdTAwMjYgQklUKDIpKTtcbitcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuK1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuK1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4rXHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuK1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHQvKiBCQ00gcHV0cyB0aGUgZGV0ZWN0ZWQgY2xhc3MgaW4gcGF5bG9hZFszXSAoPT0gc3RzMykgZGlyZWN0bHkuXG4rXHQgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlXG4rXHQgKiBub2lzZS5cbitcdCAqL1xuK1x0cmV0dXJuIHN0YXR1cy1cdTAwM2VzdHMzIFx1MDAyNiAweDBmO1xuK31cbitcbitzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbit7XG4rXHRzd2l0Y2ggKG1jdV90eXBlKSB7XG4rXHRjYXNlIDB4MDA6XHRyZXR1cm4gXCJTVCBNaWNybyBTVDMyRjEwMFwiO1xuK1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDV4eCBMQU5cIjtcbitcdGNhc2UgMHgwMjpcdHJldHVybiBcIlNUIE1pY3JvIFNURjAzMEM4XCI7XG4rXHRjYXNlIDB4MDM6XHRyZXR1cm4gXCJOdXZvdG9uIE0wNThTQU5cIjtcbitcdGNhc2UgMHgwNDpcdHJldHVybiBcIk51dm90b24gTlVDMTIyXCI7XG4rXHRkZWZhdWx0Olx0cmV0dXJuIFwidW5rbm93blwiO1xuK1x0fVxuK31cbitcbisvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4yID0ge1xuK1x0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8sXG4rXHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLFxuK1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjJfbWN1X3R5cGVfc3RyLFxuK1x0Lm9wY29kZSA9IHtcbitcdFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cdD0gUlRQU0VfTUNVX09QKDB4MDApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4NDApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0YSksXG4rXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAxKSxcbitcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxMiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVF0gPSBSVFBTRV9NQ1VfT1AoMHgxNCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHg0NCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0OCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDQ5KSxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjEgPSB7XG4rXHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyxcbitcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MsXG4rXHQubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIsXG4rXHQub3Bjb2RlID0ge1xuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4MjApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyYiksXG4rXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxNiksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyMSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVx0PSBSVFBTRV9NQ1VfT1AoMHgzMCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyNSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDI2KSxcbitcdH0sXG4rfTtcbitcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjFfZGF0YSA9IHtcbitcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMSxcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4xX2RhdGEpO1xuK1xuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9kYXRhID0ge1xuK1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxuK307XG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfZGF0YSk7XG4rXG4rLyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqL1xuK2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YSA9IHtcbitcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMixcbitcdC5uYXRpdmVfaTJjID0gdHJ1ZSxcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChjb3JlKVwiKTtcbitNT0RVTEVfQVVUSE9SKFwiSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NzE3Njg0YzBjYmQ5MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xuQEAgLTAsMCArMSwxNzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJyZWFsdGVrLXBzZS1tY3UuaFwiXG4rXG4rLypcbisgKiBUaGUgY29yZSBoYXMgYWxyZWFkeSB3YWl0ZWQgUlRQU0VfTUNVX1JFU1BPTlNFX01TIGJlZm9yZSBjYWxsaW5nIHVzLCBzb1xuKyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXG4rICogTUNVIHByb2R1Y2VzIG1vcmUgc2xvd2x5LCBrZWVwIHBvbGxpbmcgYXQgdGhlIHR5cGljYWwgcmVzcG9uc2UgY2FkZW5jZVxuKyAqIHVwIHRvIHRoZSB3b3JzdC1jYXNlIGNlaWxpbmcuXG4rICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TXHRSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcbisjZGVmaW5lIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTXHQoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUyAvIFJUUFNFX01DVV9JMkNfUkVUUllfTVMpXG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXG4re1xuK1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4rXG4rXHQvKiBTZW5kIG9wY29kZSBhcyBTTUJ1cyBjb21tYW5kIGJ5dGU7IHJlbWFpbmluZyAxMSBieXRlcyBhcyBibG9jayBkYXRhICovXG4rXHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcbitcdFx0XHRcdFx0ICAgICAgKHU4ICopcmVxICsgMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1x0aW50IHRyaWVzLCByZXQ7XG4rXG4rXHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XG4rXHRcdGlmICh0cmllcyBcdTAwM2UgMClcbitcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4rXG4rXHRcdC8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqL1xuK1x0XHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXG4rXHRcdFx0XHRcdFx0ICAgIFJUUFNFX01DVV9NU0dfU0laRSxcbitcdFx0XHRcdFx0XHQgICAgKHU4ICopcmVzcCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgXHUwMDI2XHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcbitcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kLFxuK1x0LnJlY3YgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3YsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXG4re1xuK1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4rXHR2b2lkICpidWY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogaTJjX21hc3Rlcl9zZW5kKCkgbWF5IERNQSwgc28gdGhlIGJ1ZmZlciBtdXN0IG5vdCBiZSBvbiB0aGUgc3RhY2suICovXG4rXHRidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbitcdGtmcmVlKGJ1Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUgPyAwIDogLUVJTztcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXHUwMDNlZGV2KTtcbitcdGludCB0cmllcywgcmV0O1xuK1x0dTggKmJ1ZjtcbitcbitcdC8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqL1xuK1x0YnVmID0ga21hbGxvYyhSVFBTRV9NQ1VfTVNHX1NJWkUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFidWYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Zm9yICh0cmllcyA9IDA7IHRyaWVzIFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xuK1x0XHRpZiAodHJpZXMgXHUwMDNlIDApXG4rXHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuK1xuK1x0XHRyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFKSB7XG4rXHRcdFx0bWVtY3B5KHJlc3AsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbitcdFx0XHRpZiAocnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkge1xuK1x0XHRcdFx0cmV0ID0gMDtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0cmV0ID0gLUVUSU1FRE9VVDtcbitvdXQ6XG4rXHRrZnJlZShidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmQsXG4rXHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlO1xuK1x0Ym9vbCB1c2VfbmF0aXZlO1xuK1xuK1x0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbitcdGlmICghbWF0Y2gpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgXCJtaXNzaW5nIG1hdGNoIGRhdGFcXG5cIik7XG4rXG4rXHQvKiBUaGUgZnJhbWluZyAocmF3IEkyQyB2cyBTTUJ1cykgaXMgY2FycmllZCBieSB0aGUgbWF0Y2ggZGF0YS4gKi9cbitcdHVzZV9uYXRpdmUgPSBtYXRjaC1cdTAwM2VuYXRpdmVfaTJjO1xuK1xuK1x0aWYgKHVzZV9uYXRpdmUpIHtcbitcdFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXHUwMDNlYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuK1x0XHRcdFx0XCJwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcXG5cIik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cdTAwM2VhZGFwdGVyLFxuK1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8XG4rXHRcdFx0XHRcdCAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0spKVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVPUE5PVFNVUFAsXG4rXHRcdFx0XHRcIlNNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxcblwiKTtcbitcdH1cbitcbitcdHBzZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNlKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBzZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwc2UtXHUwMDNlZGV2ID0gZGV2O1xuK1x0cHNlLVx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4rXHRwc2UtXHUwMDNldHJhbnNwb3J0ID0gdXNlX25hdGl2ZSA/IFx1MDAyNnJ0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA6IFx1MDAyNnJ0cHNlX21jdV9pMmNfc21idXNfb3BzO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3Rlcihwc2UpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfaTJjX29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1wiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgfSxcbitcdHsgLyogc2VudGluZWwgKi8gfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X2kyY19vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0cHNlX21jdV9pMmNfZHJpdmVyID0ge1xuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWVcdFx0PSBcInJlYWx0ZWstcHNlLW1jdS1pMmNcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlXHQ9IHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gsXG4rXHR9LFxuK1x0LnByb2JlXHRcdD0gcnRwc2VfbWN1X2kyY19wcm9iZSxcbit9O1xuK21vZHVsZV9pMmNfZHJpdmVyKHJ0cHNlX21jdV9pMmNfZHJpdmVyKTtcbitcbitNT0RVTEVfQVVUSE9SKFwiSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChJMkMgdHJhbnNwb3J0KVwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkxY2FkYjU1NjlhYjQ0XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xuQEAgLTAsMCArMSwxNTUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcmRldi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJyZWFsdGVrLXBzZS1tY3UuaFwiXG4rXG4rI2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFRcdDE5MjAwXG4rI2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKDEwMClcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVRcdG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUylcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsIHBzZTtcbitcdHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXY7XG4rXHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xuK1x0c3BpbmxvY2tfdCByeF9sb2NrO1x0XHQvKiBwcm90ZWN0cyByeF9idWYgYW5kIHJ4X2xlbiAqL1xuK1x0c2l6ZV90IHJ4X2xlbjtcbitcdHU4IHJ4X2J1ZltSVFBTRV9NQ1VfTVNHX1NJWkVdO1xuK307XG4rXG4rI2RlZmluZSB0b19ydHBzZV9tY3VfdWFydChwKSAgY29udGFpbmVyX29mKHAsIHN0cnVjdCBydHBzZV9tY3VfdWFydCwgcHNlKVxuK1xuKy8qXG4rICogTm8gZnJhbWluZyBpcyBkb25lIGhlcmU6IGEgZ2xpdGNoZWQgZnJhbWUgY29zdHMgb25lIHRyYW5zYWN0aW9uLCB0aGVuXG4rICogdGhlIG5leHQgX3NlbmQgcmUtZnJhbWVzIGZyb20gcnhfbGVuIDAuIFJlc3luYyB3b3JrcyBieSByZXR1cm5pbmcgY291bnRcbisgKiAobm90IHRha2UpLCBkcm9wcGluZyBhbnkgb3ZlcmZsb3cgc28gc2VyZGV2IGtlZXBzIG5vIGxlZnRvdmVyIHRvIGJsZWVkXG4rICogaW50byB0aGUgbmV4dCBmcmFtZS5cbisgKi9cbitzdGF0aWMgc2l6ZV90IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldixcbitcdFx0XHRcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpO1xuK1x0c2l6ZV90IHRha2U7XG4rXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbitcdFx0dGFrZSA9IG1pbihjb3VudCwgc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpIC0gY3R4LVx1MDAzZXJ4X2xlbik7XG4rXHRcdGlmICh0YWtlKSB7XG4rXHRcdFx0bWVtY3B5KGN0eC1cdTAwM2VyeF9idWYgKyBjdHgtXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xuK1x0XHRcdGN0eC1cdTAwM2VyeF9sZW4gKz0gdGFrZTtcbitcdFx0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiA9PSBzaXplb2YoY3R4LVx1MDAzZXJ4X2J1ZikpXG4rXHRcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIGNvbnN1bWUgYWxsIHRvIGF2b2lkIGRlc3luYy9taXNhbGlnbm1lbnQgKi9cbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0ge1xuK1x0LnJlY2VpdmVfYnVmID0gcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSxcbitcdC53cml0ZV93YWtldXAgPSBzZXJkZXZfZGV2aWNlX3dyaXRlX3dha2V1cCxcbit9O1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7XG4rXHRpbnQgd3JpdHRlbjtcbitcbitcdC8qIGNsZWFyIGFueSBsZWZ0b3ZlciByeCBzdGF0ZSBiZWZvcmUgdHJhbnNtaXR0aW5nICovXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbitcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuK1x0XHRjdHgtXHUwMDNlcnhfbGVuID0gMDtcbitcdH1cbitcbitcdHdyaXR0ZW4gPSBzZXJkZXZfZGV2aWNlX3dyaXRlKGN0eC1cdTAwM2VzZXJkZXYsIChjb25zdCB1OCAqKXJlcSwgc2l6ZW9mKCpyZXEpLFxuK1x0XHRcdFx0ICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7XG4rXHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXHRpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuK1xuK1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUsIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVQpKVxuK1x0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuK1x0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiAhPSBzaXplb2YoKnJlc3ApKVxuK1x0XHRcdHJldHVybiAtRUlPO1xuK1xuK1x0XHRtZW1jcHkocmVzcCwgY3R4LVx1MDAzZXJ4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzID0ge1xuK1x0LnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLFxuK1x0LnJlY3YgPSBydHBzZV9tY3VfdWFydF9yZWN2LFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxuK3tcbitcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnNlcmRldi1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eDtcbitcdGludCByZXQ7XG4rXG4rXHRjdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjdHgpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y3R4LVx1MDAzZXNlcmRldiA9IHNlcmRldjtcbitcdGN0eC1cdTAwM2Vwc2UuZGV2ID0gZGV2O1xuK1x0Y3R4LVx1MDAzZXBzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0Y3R4LVx1MDAzZXBzZS50cmFuc3BvcnQgPSBcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKTtcbitcbitcdHNlcmRldl9kZXZpY2Vfc2V0X2RydmRhdGEoc2VyZGV2LCBjdHgpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsIFx1MDAyNnJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpO1xuK1xuK1x0cmV0ID0gZGV2bV9zZXJkZXZfZGV2aWNlX29wZW4oZGV2LCBzZXJkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIG9wZW4gc2VyZGV2XFxuXCIpO1xuK1xuK1x0Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgXCJjdXJyZW50LXNwZWVkXCIsIFx1MDAyNnNwZWVkKTtcbitcdHNlcmRldl9kZXZpY2Vfc2V0X2JhdWRyYXRlKHNlcmRldiwgc3BlZWQpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfcGFyaXR5KHNlcmRldiwgU0VSREVWX1BBUklUWV9OT05FKTtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXHUwMDI2Y3R4LVx1MDAzZXBzZSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMVwiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1nZW4yXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuK1x0eyAvKiBzZW50aW5lbCAqLyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7XG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicmVhbHRlay1wc2UtbWN1LXVhcnRcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXG4rXHR9LFxuK1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuK307XG4rbW9kdWxlX3NlcmRldl9kZXZpY2VfZHJpdmVyKHJ0cHNlX21jdV91YXJ0X2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOWE2ZGEyYzhmMzdkOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICsxLDkwIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbitcbisjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxuKyNkZWZpbmUgX1JFQUxURUtfUFNFX01DVV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisvKlxuKyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuKyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXG4rICogdW5kZXJseWluZyB0cmFuc3BvcnQ6IHRoZSBjb3JlIHBhY2VzIHRyYW5zYWN0aW9ucyBieSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcbisgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4rICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xuKyAqIG5lZWRpbmcgdXAgdG8gfjFzIHRvIHByb2R1Y2UgYSByZXBseS5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1x0XHRcdDI1XG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TXHRcdDEwMDBcbitcbisvKlxuKyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2VcbisgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4rICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcbisgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcdFx0MzAwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVNcdFx0XHQxMDBcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVx0XHRcdDEyXG4rXG4rc3RydWN0IHJ0cHNlX21jdV9tc2cge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggc2VxX251bTtcbitcdHU4IHBheWxvYWRbOV07XG4rXHR1OCBjaGVja3N1bTtcbit9IF9fcGFja2VkO1xuK1xuKy8qXG4rICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBCQ00gZGlhbGVjdDsgUlRMIG5ldmVyIGVtaXRzIHRoZW0pLlxuKyAqIElOQ09NUExFVEUvQkFEX0NTVU0gYXJlIHRlcm1pbmFsOyBOT1RfUkVBRFkgaXMgdHJhbnNpZW50LlxuKyAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXHRcdDB4ZmRcdC8qIC1FQkFERSAgICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNXHRcdDB4ZmVcdC8qIC1FQkFETVNHICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX05PVF9SRUFEWVx0XHQweGZmXHQvKiAtRUFHQUlOICAqL1xuK1xuKy8qIEEgcG9sbGluZyB0cmFuc3BvcnQgY2FuIHN0b3AgaGVyZTogdGhlIG1hdGNoaW5nIHJlcGx5LCBvciBhIHRlcm1pbmFsIGVycm9yLiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBydHBzZV9tY3VfcmVzcF9pc19maW5hbChjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRyZXR1cm4gcmVzcC1cdTAwM2VvcGNvZGUgPT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuK1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURSB8fFxuK1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU07XG4rfVxuK1xuKy8qIE9wYXF1ZSB0byB0cmFuc3BvcnRzOyBkZWZpbmVkIGluIHJlYWx0ZWstcHNlLWNvcmUuYy4gKi9cbitzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3Q7XG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm87XG4rc3RydWN0IHJ0cHNlX21jdV9jdHJsO1xuK1xuKy8qIFBlci1jb21wYXRpYmxlIG1hdGNoIGRhdGEgKHRoZSBvZl9tYXRjaCAuZGF0YSkuICovXG4rc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcbitcdGJvb2wgbmF0aXZlX2kyYztcdC8qIHJhdy1JMkMgZnJhbWluZyAodnMgU01CdXMpOyBJMkMgdHJhbnNwb3J0IG9ubHkgKi9cbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyB7XG4rXHRpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7XG4rXHRpbnQgKCpyZWN2KShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfY3RybCB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2IHBjZGV2O1xuK1x0c3RydWN0IG11dGV4IG11dGV4OyAvKiBzZXJpYWxpemVzIE1DVSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zYWN0aW9ucyAqL1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXA7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgKnRyYW5zcG9ydDtcbitcbitcdHN0cnVjdCByZWd1bGF0b3IgKnBvZV9zdXBwbHk7XG4rfTtcbitcbitpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKTtcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGE7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9kYXRhO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGE7XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjo0MjoyNi4wMDI4OTYzOTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjAzNTQ3MjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbCBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IGRyaXZlciBmb3IgYSBSZWFsdGVrIFBTRSBNQ1UsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BzZS1wZC9gLiBUaGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gSXQgc3VwcG9ydHMgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cywgd2hpY2ggbWVhbnMgd2UgY2FuIGxldmVyYWdlIGV4aXN0aW5nIGZ1enppbmcgY2FwYWJpbGl0aWVzIGZvciB0aGVzZSBpbnRlcmZhY2VzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgc3RhbmRhcmQgZmlsZXM6IGRvY3VtZW50YXRpb24sIE1BSU5UQUlORVJTIHVwZGF0ZSwgS2NvbmZpZywgTWFrZWZpbGUsIGFuZCB0aGUgY29yZSBkcml2ZXIgZmlsZXMgKGByZWFsdGVrLXBzZS1tY3UtY29yZS5jYCwgYHJlYWx0ZWstcHNlLW1jdS1pMmMuY2AsIGByZWFsdGVrLXBzZS1tY3UtdWFydC5jYCwgYW5kIHRoZSBoZWFkZXIpLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBoYW5kbGUgdGhpcz8gR2l2ZW4gaXQncyBJMkMgYW5kIFVBUlQsIHRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcy4gU3l6a2FsbGVyIGNhbiBmdXp6IEkyQyBkZXZpY2VzIHZpYSBgL2Rldi9pMmMtKmAgb3IgdmlydHVhbCBJMkMgZGV2aWNlcywgYW5kIFVBUlQgZGV2aWNlcyB2aWEgYHNlcmRldmAuIEl0IGFscmVhZHkgaGFzIEkyQyBzdXBwb3J0LCBpbmNsdWRpbmcgZm9yIHBzZXVkby1kZXZpY2VzLiBUaGUgcXVlc3Rpb24gaXMgcmVhY2hhYmlsaXR5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSTJDIGRldmljZXMgY2FuIGJlIGluc3RhbnRpYXRlZCB0aHJvdWdoIHN5c2ZzIChgbmV3X2RldmljZWApIG9yIGRldmljZSB0cmVlIG92ZXJsYXlzLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIGBwc2VfY29udHJvbGxlcl9kZXZgLCB3aGljaCBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBldGh0b29sIFBTRSBjb21tYW5kcy4gVGhhdCdzIGdvb2QsIHNvIHRoZSBldGh0b29sIGludGVyZmFjZSBjYW4gcmVhY2ggdGhpcyBpZiB0aGUgZGV2aWNlIGlzIGluc3RhbnRpYXRlZC4gVGhpcyBkZWZpbml0ZWx5IGluY3JlYXNlcyBpdHMgZnV6emluZyB2YWx1ZS5cblxuRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBuZXcgZHJpdmVyIHdpdGggZnVuY3Rpb25hbCBjaGFuZ2VzLCBhIGdvb2QgdGFyZ2V0LlxuXG5MZXQncyBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMuIFdlIGhhdmUgYFBTRV9SRUFMVEVLX01DVWAsIGBQU0VfUkVBTFRFS19NQ1VfSTJDYCwgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIHRvIGd1aWRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gTG9va2luZyBhdCBgcmVhbHRlay1wc2UtbWN1LWNvcmUuY2AsIHdlIHNlZSBhIHJhbmdlIG9mIGZ1bmN0aW9uczogYHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZWAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3YCwgYHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlYCwgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWAsIGBydHBzZV9tY3VfcG9ydF9kaXNhYmxlYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdGAsIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHJpb2AsIGBydHBzZV9tY3VfcG9ydF9zZXRfcHJpb2AsIGBydHBzZV9tY3VfcmVnaXN0ZXJgLCBgcnRwc2VfbWN1X2RvX3hmZXJgLCBgcnRwc2VfbWN1X3BvcnRfcXVlcnlgLCBhbmQgYHJ0cHNlX21jdV9wb3J0X2NtZGAuXG5cbkZvciBJMkMsIHdlIGhhdmUgYHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZGAsIGBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZGAsIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YCwgYW5kIGBydHBzZV9tY3VfaTJjX3Byb2JlYC5cblxuRm9yIFVBUlQsIHdlIGhhdmUgYHJ0cHNlX21jdV91YXJ0X3JlY2VpdmVgLCBgcnRwc2VfbWN1X3VhcnRfc2VuZGAsIGBydHBzZV9tY3VfdWFydF9yZWN2YCwgYW5kIGBydHBzZV9tY3VfdWFydF9wcm9iZWAuXG5cblRvIHRhcmdldCwgSSB3aWxsIGxpc3QgYFBTRV9SRUFMVEVLX01DVV9JMkNgIGFuZCBgUFNFX1JFQUxURUtfTUNVX1VBUlRgIGluIHRoZSBjb25maWdzLlxuXG5Gb3IgZnV6emluZyBmb2N1cyBzeW1ib2xzLCBJIHdpbGwgcHJpb3JpdGl6ZSB0aGVzZSBmdW5jdGlvbnMsIGZvciBub3cuXG5cbkxldCdzIGxpc3QgdGhlc2UgY29uZmlncyB0byBlbnN1cmUgdGhpcyBpcyBlYXN5IHRvIHJlcHJvZHVjZTpcbiogICBgUFNFX1JFQUxURUtfTUNVX0kyQ2BcbiogICBgUFNFX1JFQUxURUtfTUNVX1VBUlRgXG5cbkFuZCBJJ2xsIHVzZSB0aGVzZSBmdW5jdGlvbnMgYXMgZnV6emluZyB0YXJnZXRzOlxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2BcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd2BcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YFxuKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgXG4qICAgYHJ0cHNlX21cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjQyOjQyLjAzODM3MTE5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY0NTY0ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBTRV9SRUFMVEVLX01DVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZz0xND1pZiBQU0VfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTE1LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjE2OmNvbmZpZyBQU0VfUkVBTFRFS19NQ1VcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjEtXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MjI6Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9JMkNcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcXFwiXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjQtXFx0ZGVwZW5kcyBvbiBJMkNcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzoyNTpcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzItXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MzM6Y29uZmlnIFBTRV9SRUFMVEVLX01DVV9VQVJUXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzQtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVxcXCJcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0zNS1cXHRkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MzY6XFx0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTM3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZT00PW9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgKz0gcHNlX2NvcmUub1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICs9IHJlYWx0ZWstcHNlLW1jdS1jb3JlLm9cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQykgKz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSArPSByZWFsdGVrLXBzZS1tY3UtdWFydC5vXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICs9IHBzZV9yZWd1bGF0b3Iub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjo0Mjo0NC42MDI5NDI1MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDcyMTE4MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWx0ZWsgUFNFIE1DVSBEcml2ZXIgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyBob3cgaXQncyBzdHJ1Y3R1cmVkOiBpdCBpbXBsZW1lbnRzIHRoZSBldGh0b29sIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMsIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB1c2luZyBuZXRsaW5rLiBUaGF0J3MgZ29vZCwga2VlcHMgaXQgbWFuYWdlYWJsZSBhbmQgZmxleGlibGUuIEkgc2VlIHRoYXQgaW5zdGFudGlhdGlvbiBjYW4gYmUgZG9uZSBlaXRoZXIgdGhyb3VnaCBJMkMgb3Igc2VyZGV2LiBNYWtlcyBzZW5zZTsgZ29vZCBkZXNpZ24gY2hvaWNlIGZvciBmbGV4aWJpbGl0eSBpbiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgUFNFX1JFQUxURUtfTUNVX0kyQ2AgYW5kIGBQU0VfUkVBTFRFS19NQ1VfVUFSVGAsIHdoaWNoIGFyZSB3aGF0IEknZCBleHBlY3QuXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBjb21wb25lbnRzLiBMZXQncyBtYWtlIHN1cmUgSSdtIGNsZWFyIG9uIHRoZSBrZXkgc3ltYm9sczogdGhlIFBTRSBjb250cm9sbGVyIG9wcyBhbmQgdGhlIHRyYW5zcG9ydCBvcHMuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkLiBJJ2xsIG5lZWQgdG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcuXG5cbkFoLCBoZXJlJ3MgYSBkZXRhaWxlZCBsaXN0IHRoYXQgSSB3aWxsIHVzZSBhcyBteSBjb3JlIHVuZGVyc3RhbmRpbmcgb2YgZnVuY3Rpb25hbGl0eTpcblxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2BcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd2BcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0YFxuKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvYFxuKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHJpb2BcbiogICBgcnRwc2VfbWN1X2RvX3hmZXJgXG4qICAgYHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZGBcbiogICBgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2YFxuKiAgIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kYFxuKiAgIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YFxuKiAgIGBydHBzZV9tY3VfdWFydF9yZWNlaXZlYFxuKiAgIGBydHBzZV9tY3VfdWFydF9zZW5kYFxuKiAgIGBydHBzZV9tY3VfdWFydF9yZWN2YFxuXG5UaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBicmVha2Rvd24gb2YgdGhlIGZ1bmN0aW9uYWxpdHksIGNvdmVyaW5nIHBvd2VyIG1hbmFnZW1lbnQsIGFuZCBjb21tdW5pY2F0aW9uIGludGVyZmFjZXMuIE5vdywgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gYmUuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzczLCJPdXRwdXRUb2tlbnMiOjQxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjo0Mjo1NC4wNzUwNjM0NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTI5NDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X2RvX3hmZXJcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfc21idXNfc2VuZFwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2XCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2XCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWNlaXZlXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB2aWEgSTJDIG9yIFVBUlQuIEl0IGltcGxlbWVudHMgdGhlIGV0aHRvb2wgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIFBTRSBvcGVyYXRpb25zIGFuZCB0aGUgdHJhbnNwb3J0IGxheWVyIGltcGxlbWVudGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfUkVBTFRFS19NQ1VfSTJDXCIsXG4gICAgXCJQU0VfUkVBTFRFS19NQ1VfVUFSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZW5hYmxlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9kaXNhYmxlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X3NldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfZG9feGZlclwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfbmF0aXZlX3NlbmRcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3ZcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3NlbmRcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSwgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHZpYSBJMkMgb3IgVUFSVC4gSXQgaW1wbGVtZW50cyB0aGUgZXRodG9vbCBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgUFNFIG9wZXJhdGlvbnMgYW5kIHRoZSB0cmFuc3BvcnQgbGF5ZXIgaW1wbGVtZW50YXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[1] Phase: Succeeded StartedAt: 2026-07-10 16:43:05 +0000 UTC FinishedAt: 2026-07-10 16:43:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 16:43:05 +0000 UTC FinishedAt: 2026-07-10 16:43:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2] Phase: Succeeded StartedAt: 2026-07-10 16:43:05 +0000 UTC FinishedAt: 2026-07-10 18:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 16:43:05 +0000 UTC FinishedAt: 2026-07-10 18:28:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 16:43:05 +0000 UTC FinishedAt: 2026-07-10 16:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 16:43:05 +0000 UTC FinishedAt: 2026-07-10 16:43:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-convert-artifact-2637457085/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 16:43:16 +0000 UTC FinishedAt: 2026-07-10 17:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 16:43:16 +0000 UTC FinishedAt: 2026-07-10 17:38:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4de3afc4-295f-46b3-88e2-a7eb8c23599e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-convert-artifact-2637457085/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5d4e8d99-cb82-4dd5-ac87-cfcaa5615669", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-3213725683/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 16:43:16 +0000 UTC FinishedAt: 2026-07-10 17:37:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4de3afc4-295f-46b3-88e2-a7eb8c23599e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-convert-artifact-2637457085/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5d4e8d99-cb82-4dd5-ac87-cfcaa5615669", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-3213725683/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 17:38:27 +0000 UTC FinishedAt: 2026-07-10 17:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 17:38:28 +0000 UTC FinishedAt: 2026-07-10 17:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 17:38:28 +0000 UTC FinishedAt: 2026-07-10 17:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 17:38:28 +0000 UTC FinishedAt: 2026-07-10 17:38:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-convert-artifact-3293852440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 17:38:57 +0000 UTC FinishedAt: 2026-07-10 17:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 17:38:57 +0000 UTC FinishedAt: 2026-07-10 17:40:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5d4e8d99-cb82-4dd5-ac87-cfcaa5615669,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-3213725683/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 17:41:07 +0000 UTC FinishedAt: 2026-07-10 17:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 17:41:07 +0000 UTC FinishedAt: 2026-07-10 17:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 17:41:07 +0000 UTC FinishedAt: 2026-07-10 18:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 17:41:07 +0000 UTC FinishedAt: 2026-07-10 18:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4de3afc4-295f-46b3-88e2-a7eb8c23599e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-convert-artifact-3293852440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7f517c70-bc47-4c7a-bc9d-b6545b479c43", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-1556581252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 17:41:08 +0000 UTC FinishedAt: 2026-07-10 18:24:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4de3afc4-295f-46b3-88e2-a7eb8c23599e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-convert-artifact-3293852440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7f517c70-bc47-4c7a-bc9d-b6545b479c43", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-1556581252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 18:24:37 +0000 UTC FinishedAt: 2026-07-10 18:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 18:24:37 +0000 UTC FinishedAt: 2026-07-10 18:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 18:24:37 +0000 UTC FinishedAt: 2026-07-10 18:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 18:24:37 +0000 UTC FinishedAt: 2026-07-10 18:26:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7f517c70-bc47-4c7a-bc9d-b6545b479c43,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-1556581252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 18:26:48 +0000 UTC FinishedAt: 2026-07-10 18:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 18:26:48 +0000 UTC FinishedAt: 2026-07-10 18:28:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5d4e8d99-cb82-4dd5-ac87-cfcaa5615669,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7f517c70-bc47-4c7a-bc9d-b6545b479c43,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-3213725683/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-1556581252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 18:26:48 +0000 UTC FinishedAt: 2026-07-10 18:26:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 18:26:48 +0000 UTC FinishedAt: 2026-07-10 18:26:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-convert-artifact-282513649/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 18:26:48 +0000 UTC FinishedAt: 2026-07-10 18:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 18:26:48 +0000 UTC FinishedAt: 2026-07-10 18:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 18:26:48 +0000 UTC FinishedAt: 2026-07-10 18:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 18:26:58 +0000 UTC FinishedAt: 2026-07-10 18:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bzqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtpse_mcu_port_get_admin_state","rtpse_mcu_port_get_pw_status","rtpse_mcu_port_get_pw_class","rtpse_mcu_port_get_actual_pw","rtpse_mcu_port_get_voltage","rtpse_mcu_port_enable","rtpse_mcu_port_disable","rtpse_mcu_port_get_pw_limit","rtpse_mcu_port_set_pw_limit","rtpse_mcu_port_get_pw_limit_ranges","rtpse_mcu_port_get_prio","rtpse_mcu_port_set_prio","rtpse_mcu_do_xfer","rtpse_mcu_i2c_smbus_send","rtpse_mcu_i2c_smbus_recv","rtpse_mcu_i2c_native_send","rtpse_mcu_i2c_native_recv","rtpse_mcu_uart_receive","rtpse_mcu_uart_send","rtpse_mcu_uart_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6d86ce0da0d5631721c142ea9bb5499cc129b347","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART"],"series_id":"85511d49-3b92-4127-a745-9b557f5ff2fe","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 18:26:58 +0000 UTC FinishedAt: 2026-07-10 18:28:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5d4e8d99-cb82-4dd5-ac87-cfcaa5615669,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7f517c70-bc47-4c7a-bc9d-b6545b479c43,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-3213725683/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-build-action-1556581252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2bzqd/series-workflow2bzqd-convert-artifact-282513649/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}