Name: series-workflow5rvsc Phase: Succeeded StartedAt: 2026-07-27 00:55:17 +0000 UTC FinishedAt: 2026-07-27 03:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[0] Phase: Succeeded StartedAt: 2026-07-27 00:55:17 +0000 UTC FinishedAt: 2026-07-27 01:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 00:55:17 +0000 UTC FinishedAt: 2026-07-27 01:16:15 +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": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART", "SERIAL_DEV_BUS", "I2C" ], "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": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART", "SERIAL_DEV_BUS", "I2C" ], "series_id": "fc30f103-2a5e-46c8-99ab-b940ecc51ee2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtpse_mcu_register", "rtpse_mcu_uart_probe", "rtpse_mcu_i2c_probe", "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_uart_receive" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDAxOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OywKICAgICYjMzQ7U0VSSUFMX0RFVl9CVVMmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCBzdXBwb3J0aW5nIGJvdGggSTJDIGFuZCBVQVJUIHRyYW5zcG9ydHMuIFRoZSBkcml2ZXIgZXhwb3NlcyBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBuZXRsaW5rIGFuZCBwYXJzZXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2Ugb3ZlciBJMkMvVUFSVC4gSXQgY2FuIGJlIHByb2JlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3IgSTJDIHN5c2ZzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI4NmMyMTY2MjA1OWRhNDgxZTcxOWFiOWFkYWVhZTg3N2EwNjgxZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwMToxNToxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wZjFhODE5ZGI0OWJiY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTgwIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBSZWFsdGVrIFBTRSBNQ1VcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBBIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IG1hbmFnZXMgdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KVxuJiM0MzsgIGhhcmR3YXJlIG9uIGEgcmFuZ2Ugb2YgbWFuYWdlZCBQb0Ugc3dpdGNoZXMuIFRoZSBob3N0IENQVSB0YWxrcyBvbmx5IHRvXG4mIzQzOyAgdGhpcyBNQ1UgLSBvdmVyIEkyQy9TTUJ1cyBvciBVQVJUIC0gdXNpbmcgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sO1xuJiM0MzsgIHRoZSBQU0Ugc2lsaWNvbiBpdCBkcml2ZXMgc2l0cyBiZWhpbmQgdGhlIE1DVSBhbmQgaXMgbmV2ZXIgYWNjZXNzZWRcbiYjNDM7ICBkaXJlY3RseS4gRm9yIGV4YW1wbGUsIG9uIHRoZSBaeXhlbCBHUzE5MDAtMTBIUCB0aGUgU29DIHJlYWNoZXMgdGhlIE1DVVxuJiM0MzsgIG92ZXIgVUFSVCwgYW5kIHRoZSBNQ1UgbWFuYWdlcyB0aGUgb24tYm9hcmQgUFNFIGNoaXAuXG4mIzQzO1xuJiM0MzsgIFRoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIE1DVSB0b2dldGhlciB3aXRoIGl0cyBSZWFsdGVrIGZpcm13YXJlOiB0aGVcbiYjNDM7ICBmaXJtd2FyZSBhbmQgaXRzIGhvc3QgcHJvdG9jb2wsIHdoaWNoIGFyZSBzdGFibGUgYWNyb3NzIGJvYXJkcy4gVGhlXG4mIzQzOyAgbWljcm9jb250cm9sbGVyIHNpbGljb24gaXMgYSBnZW5lcmFsLXB1cnBvc2UgcGFydCB0aGF0IHZhcmllcywgYW5kIHRoZVxuJiM0MzsgIFBTRSBzaWxpY29uIGJlaGluZCB0aGUgTUNVIChSZWFsdGVrIFJUTDgyM3gvUlRMODIzOSogb3IgQnJvYWRjb21cbiYjNDM7ICBCQ001OXh4eCkgaXMgcmVwb3J0ZWQgYnkgdGhlIE1DVSBhbmQgZGV0ZWN0ZWQgYXQgcnVudGltZSAtIG5laXRoZXIgaXNcbiYjNDM7ICBuYW1lZCBoZXJlLlxuJiM0MztcbiYjNDM7ICBUd28gcHJvdG9jb2wgZ2VuZXJhdGlvbnMgZXhpc3QsIGJvdGggUmVhbHRlayYjMzk7czpcbiYjNDM7ICAgIGdlbjEgIG9sZGVyIGJvYXJkcywgd2hlcmUgdGhlIE1DVSBmcm9udHMgQnJvYWRjb20gUFNFIHNpbGljb25cbiYjNDM7ICAgIGdlbjIgIHRoZSBhbHRlcmVkIHByb3RvY29sIHVzZWQgd2l0aCBSZWFsdGVrJiMzOTtzIG93biBQU0Ugc2lsaWNvblxuJiM0MztcbiYjNDM7ICBPbiBhbiBJMkMgYXR0YWNobWVudCB0aGUgZnJhbWluZyB0aGUgTUNVIGZpcm13YXJlIGV4cGVjdHMgaXMgcGFydCBvZiB0aGVcbiYjNDM7ICBjb21wYXRpYmxlOiAmIzM5Oy1zbWJ1cyYjMzk7IChyZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlIGFuZCBhIHJlcGVhdGVkXG4mIzQzOyAgc3RhcnQpIG9yICYjMzk7LWkyYyYjMzk7IChiYXJlIGJsb2NrIHdyaXRlcyBhbmQgcmVhZHMpLiBBIFVBUlQgYXR0YWNobWVudCBjYXJyaWVzXG4mIzQzOyAgbm8gZnJhbWluZyBzdWZmaXg7IHRoZSB0cmFuc3BvcnQgaXMgZ2l2ZW4gYnkgdGhlIHBhcmVudCAmIzM5O3NlcmlhbCYjMzk7IG5vZGUuXG4mIzQzO1xuJiM0MzsgIEVhY2ggYm9hcmQgYWRkaXRpb25hbGx5IGNhcnJpZXMgYSBkZXZpY2Utc3BlY2lmaWMgY29tcGF0aWJsZSB0aGF0IGZhbGxzXG4mIzQzOyAgYmFjayB0byBvbmUgb2YgdGhlIHByb3RvY29sIGNvbXBhdGlibGVzIGFib3ZlLiBEcml2ZXJzIGJpbmQgb24gdGhlXG4mIzQzOyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kXG4mIzQzOyAgcmVzZXJ2ZXMgYSBwbGFjZSBmb3IgYSBmdXR1cmUgcGVyLWJvYXJkIHF1aXJrIHdpdGhvdXQgaGF2aW5nIHRvIHJldHJvZml0XG4mIzQzOyAgZGV2aWNlIHRyZWVzIGFscmVhZHkgaW4gdGhlIGZpZWxkLlxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgb25lT2Y6XG4mIzQzOyAgICAgICMgVUFSVFxuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYTEtcHNlXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMVxuJiM0MztcbiYjNDM7ICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkyMC0yNGhwLXYyLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjEtc21idXNcbiYjNDM7XG4mIzQzOyAgICAgICMgVUFSVFxuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYjEtcHNlXG4mIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCx4bWcxOTE1LTEwZXAtcHNlXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMlxuJiM0MztcbiYjNDM7ICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHp5eGVsLHhzMTkzMC0xMmhwLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcbiYjNDM7XG4mIzQzOyAgICAgICMgSTJDLCByYXcgZnJhbWluZ1xuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0gbGlua3N5cyxsZ3MzMjhtcGMtdjItcHNlXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcbiYjNDM7XG4mIzQzOyAgcmVnOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgcmVzZXQtZ3Bpb3M6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogUmVzZXQgbGluZSBvZiB0aGUgTUNVLlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgZGlzYWJsZS1wb3J0cy1ncGlvczpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBIYXJkd2FyZSBnYXRlIHRoYXQgZm9yY2VzIGFsbCBwb3J0cyBpbnRvIGFkbWluLWRpc2FibGVkIHN0YXRlIHdoaWxlXG4mIzQzOyAgICAgIGFzc2VydGVkLlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sI1xuJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvc2VyaWFsL3NlcmlhbC1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXG4mIzQzOyAgIyBBICYjMzk7LXNtYnVzJiMzOTsvJiMzOTstaTJjJiMzOTsgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICYjMzk7cmVnJiMzOTsgYW5kXG4mIzQzOyAgIyBjYW5ub3QgY2Fycnkgc2VyaWFsIGJ1cyBwcm9wZXJ0aWVzLiBBIGJhcmUgZ2VuIGNvbXBhdGlibGUgaXMgYSBVQVJUXG4mIzQzOyAgIyBhdHRhY2htZW50OiBubyAmIzM5O3JlZyYjMzk7LCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIHJlZ1xuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXG4mIzQzOyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6IGZhbHNlXG4mIzQzO1xuJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudFxuJiM0MzsgIC0gfFxuJiM0MzsgICAgaTJjIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7enl4ZWwseHMxOTMwLTEyaHAtcHNlXCYjMzQ7LCBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBpMmMge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcJiMzNDssIFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBVQVJUIGF0dGFjaG1lbnRcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIHNlcmlhbCB7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3p5eGVsLGdzMTkwMC0xMGhwLWExLXBzZVwmIzM0OywgXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjFcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSBcdTAwM2MxOTIwMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA2MGNmZjAwOTUzZGNiZS4uMTYxMzZhYzExZTA2MzcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0yMjczNiw2ICYjNDM7MjI3MzYsMTMgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0aW5jbHVkZS9zb3VuZC9ydCouaFxuIEY6XHRzb3VuZC9zb2MvY29kZWNzL3J0KlxuIFxuJiM0MztSRUFMVEVLIFBTRSBNQ1UgRFJJVkVSXG4mIzQzO006XHRKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuJiM0MztcbiBSRUFMVEVLIE9UVE8gV0FUQ0hET0dcbiBNOlx0U2FuZGVyIFZhbmhldWxlIFx1MDAzY3NhbmRlckBzdmFuaGV1bGUubmV0XHUwMDNlXG4gTDpcdGxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbmluZGV4IDdlZjI5NjU3ZWU1ZGQxLi5hMGYyYWU2NjhjNjdjOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuQEAgLTEzLDYgJiM0MzsxMywzNCBAQCBtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXG4gXG4gaWYgUFNFX0NPTlRST0xMRVJcbiBcbiYjNDM7Y29uZmlnIFBTRV9SRUFMVEVLX01DVVxuJiM0MztcdHRyaXN0YXRlXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzIHNlbGVjdGVkXG4mIzQzO1x0ICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB0cmFuc3BvcnQgb3B0aW9ucyBiZWxvdy5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQ1xuJiM0MztcdHNlbGVjdCBQU0VfUkVBTFRFS19NQ1VcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuJiM0MztcdCAgaGFyZHdhcmUgb24gdmFyaW91cyBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMsIGF0dGFjaGVkXG4mIzQzO1x0ICB2aWEgSTJDL1NNQnVzLiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsXG4mIzQzO1x0ICBQU0Ugc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYVxuJiM0MztcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuXG4mIzQzO1xuJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlRcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTXG4mIzQzO1x0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4mIzQzO1x0ICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWRcbiYjNDM7XHQgIHZpYSBVQVJULiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsIFBTRVxuJiM0MztcdCAgc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYVxuJiM0MztcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LlxuJiM0MztcbiBjb25maWcgUFNFX1JFR1VMQVRPUlxuIFx0dHJpc3RhdGUgXCYjMzQ7UmVndWxhdG9yIGJhc2VkIFBTRSBjb250cm9sbGVyXCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG5pbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuQEAgLTMsNiAmIzQzOzMsOSBAQFxuIFxuIG9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgJiM0Mzs9IHBzZV9jb3JlLm9cbiBcbiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVSkgJiM0Mzs9IHJlYWx0ZWstcHNlLW1jdS1jb3JlLm9cbiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkMpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cbiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LXVhcnQub1xuIG9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSAmIzQzOz0gcHNlX3JlZ3VsYXRvci5vXG4gb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSAmIzQzOz0gcGQ2OTJ4MC5vXG4gb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODIwNGNiNDMwZmZlYThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5AQCAtMCwwICYjNDM7MSw5ODkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXNcbiYjNDM7ICogUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLiBUaGUgTUNVIHNwZWFrcyBhIDEyLWJ5dGUgZml4ZWQtZnJhbWVcbiYjNDM7ICogbWFuYWdlbWVudCBwcm90b2NvbDsgdGhpcyBkcml2ZXIgY292ZXJzIHR3byBnZW5lcmF0aW9ucyBvZiB0aGVcbiYjNDM7ICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLlxuJiM0MzsgKlxuJiM0MzsgKiBNYW55IFBvRSBzd2l0Y2ggZGVzaWducyBwdXQgYSBkZWRpY2F0ZWQgbWljcm9jb250cm9sbGVyIGluIGZyb250IG9mIHRoZVxuJiM0MzsgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yXG4mIzQzOyAqIFVBUlQsIGFuZCB0aGUgTUNVIGluIHR1cm4gbWFuYWdlcyB0aGUgUFNFIGNoaXBzIG9uIHRoZSBib2FyZC4gVGhlIE1DVVxuJiM0MzsgKiBzcGVha3MgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdFxuJiM0MzsgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuXG4mIzQzOyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmVcbiYjNDM7ICogdGhlIE1DVSBmcm9udHMgYW5kIG1hbmFnZXMgQnJvYWRjb20gUFNFIHNpbGljb247IEdlbjIgYmVpbmcgdXNlZCB3aXRoXG4mIzQzOyAqIFJlYWx0ZWsgUFNFIHNpbGljb24uIFRoZSB0d28gc2hhcmUgZnJhbWUgZm9ybWF0IGFuZCBhIHN1bS1tb2QtMjU2XG4mIzQzOyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzO1xuJiM0MzsgKiB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIHBlci1kaWFsZWN0IG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcbiYjNDM7ICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbFxuJiM0MzsgKiBmYW1pbHksIGFuZCBcJiMzNDtkdW1iIFBTRVwmIzM0OyBtb2RlcyB3aGVyZSBubyBob3N0IGNvbnRyb2wgaXMgd2lyZWQgdXAgYXQgYWxsLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1VcbiYjNDM7ICogcmVzcG9uc2VzLCBhbmQgdGhlIHBzZV9jb250cm9sbGVyX29wcyBpbnRlZ3JhdGlvbi4gVHJhbnNwb3J0IG1vZHVsZXNcbiYjNDM7ICogKHJlYWx0ZWstcHNlLW1jdS1pMmMsIHJlYWx0ZWstcHNlLW1jdS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3ZcbiYjNDM7ICogY2FsbGJhY2tzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4Qlx0XHQweDAxMzhcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcdFx0MHgwMDM5XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5Q1x0XHQweDAxMzlcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExXHRcdDB4ZTExMVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcdFx0MHhlMTIxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1x0XHQweDAxXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcdFx0MHgwMlxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19URVNUXHRcdFx0MHgwM1x0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUXHRcdDB4MDRcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFRcdFx0MHgwNVx0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkdcdFx0MHgwNlxuJiM0MztcbiYjNDM7LyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSXHQweDAyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9NQVhfUE9SVFNcdFx0XHQ0OFxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWVx0XHQzXG4mIzQzO1xuJiM0MztlbnVtIHJ0cHNlX21jdV9jbWQge1xuJiM0MztcdFJUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURSxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLFxuJiM0MztcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVMsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUUyxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUcsXG4mIzQzO1xuJiM0MztcdFJUUFNFX01DVV9OVU1fQ01EUyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIHtcbiYjNDM7XHR1OCBvcDtcbiYjNDM7XHRib29sIHZhbGlkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogU2hvcnRoYW5kIGZvciB0aGUgZGVzaWduYXRlZC1pbml0aWFsaXplciBlbnRyaWVzIGluIGRpYWxlY3Qgb3Bjb2RlIHRhYmxlcy4gKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKVx0eyAub3AgPSAob3BjKSwgLnZhbGlkID0gdHJ1ZSB9XG4mIzQzO1xuJiM0MzsvKiBQYXJzZWQgTUNVIHJlc3BvbnNlIHN0cnVjdHVyZXMgKGRlY29kZWQgZnJvbSBydHBzZV9tY3VfbXNnIHJlcGxpZXMpICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2luZm8ge1xuJiM0MztcdHU4IG1heF9wb3J0cztcbiYjNDM7XHRib29sIHN5c3RlbV9lbmFibGU7XG4mIzQzO1x0dTE2IGRldmljZV9pZDtcbiYjNDM7XHR1OCBzd192ZXI7XG4mIzQzO1x0dTggbWN1X3R5cGU7XG4mIzQzO1x0dTggY29uZmlnX3N0YXR1cztcbiYjNDM7XHR1OCBleHRfdmVyO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcbiYjNDM7XHR1OCB1dmxvO1xuJiM0MztcdHU4IG92bG87XG4mIzQzO1x0Ym9vbCBwcmVhbGxvY19lbmFibGU7XG4mIzQzO1x0dTggbnVtX29mX3BzZXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHtcbiYjNDM7XHR1OCBzdHMxO1xuJiM0MztcdHU4IHN0czI7XG4mIzQzO1x0dTggc3RzMztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7XG4mIzQzO1x0dTE2IHZvbHRhZ2VfcmF3O1x0LyogNjQuNDVtVi9MU0IgKi9cbiYjNDM7XHR1MTYgY3VycmVudF9yYXc7XHQvKiAxbUEvTFNCICovXG4mIzQzO1x0dTE2IHRlbXBlcmF0dXJlX3JhdztcdC8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovXG4mIzQzO1x0dTE2IHBvd2VyX3JhdztcdFx0LyogMTAwbVcvTFNCICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIHtcbiYjNDM7XHRib29sIGVuYWJsZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIHtcbiYjNDM7XHR1OCBtYXhfcG93ZXI7XG4mIzQzO1x0dTggcHJpb3JpdHk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3Qge1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIG9wY29kZVtSVFBTRV9NQ1VfTlVNX0NNRFNdO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlc3BvbnNlIHBhcnNlcnMgZm9yIHRoZSBmaWVsZHMgdGhhdCBkaWZmZXIgYmV0d2VlbiBkaWFsZWN0czsgZWFjaFxuJiM0MztcdCAqIGRpYWxlY3Qgc3VwcGxpZXMgaXRzIG93bi4gT3RoZXIgcmVzcG9uc2VzIHNoYXJlIG9uZSBsYXlvdXQgYW5kIGFyZVxuJiM0MztcdCAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssXG4mIzQzO1x0ICogYXMgYSBtaXNtYXRjaGVkIGxheW91dCBjYW5ub3QgYmUgZGV0ZWN0ZWQgKHRoZSBjaGVja3N1bSBzdGlsbCBwYXNzZXMpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7XG4mIzQzO1x0aW50ICgqcGFyc2VfcG9ydF9jbGFzcykoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKTtcbiYjNDM7XHRjb25zdCBjaGFyICooKm1jdV90eXBlX3N0cikodW5zaWduZWQgaW50IG1jdV90eXBlKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdHUxNiBkZXZpY2VfaWQ7XG4mIzQzO1x0dTMyIG1heF9tV19wZXJfcG9ydDtcbiYjNDM7XHRlbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDtcdC8qIGNvbW1hbmQgdXNlZCBieSBzZXRfcHdfbGltaXQgKi9cbiYjNDM7XHR1MzIgcHdfc2V0X2xzYl9tVztcdFx0LyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovXG4mIzQzO1x0dTMyIHB3X3JlYWRfbHNiX21XO1x0XHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOEJcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcbiYjNDM7XHQubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtSVEw4MjM5XCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gNDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzljX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOUNcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gNDAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcbiYjNDM7XHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMSxcbiYjNDM7XHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtCQ001OTExMVwmIzM0OyxcbiYjNDM7XHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4mIzQzO1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gMjAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxuJiM0MztcdCAqIGFuZCB0aGUgR2VuMSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kIChcdTAwM2M9NTFXKTtcbiYjNDM7XHQgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbiYjNDM7XHQubmFtZSA9IFwmIzM0O0JDTTU5MTIxXCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpO1xuJiM0MztcdG1zZy1cdTAwM2VvcGNvZGUgPSBvcGNvZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHU4IHN1bSA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4tLSlcbiYjNDM7XHRcdHN1bSAmIzQzOz0gKmJ1ZiYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIHN1bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZG9feGZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KSB7XG4mIzQzO1x0XHQvKiBSb2xsaW5nIHNlcV9udW0gc28gYSBsYXRlIHJlcGx5IGNhbiYjMzk7dCBwYXNzIGFzIGEgbGF0ZXIgb25lLiAqL1xuJiM0MztcdFx0cmVxLVx1MDAzZXNlcV9udW0gPSBwc2UtXHUwMDNlc2VxJiM0MzsmIzQzOztcbiYjNDM7XHRcdHJlcS1cdTAwM2VjaGVja3N1bSA9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHBzZS1cdTAwM2V0cmFuc3BvcnQtXHUwMDNlc2VuZChwc2UsIHJlcSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgTUNVIG5lZWRzIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiByZWNlaXZpbmcgYSByZXF1ZXN0XG4mIzQzO1x0XHQgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0b1xuJiM0MztcdFx0ICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3ZcbiYjNDM7XHRcdCAqIHBhdGggc2ltcGxlOiBhIHNpbmdsZSBib3VuZGVkIHdhaXQgcmF0aGVyIHRoYW4gYSBnZW5lcmljIHJldHJ5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQocmVzcCwgMCwgc2l6ZW9mKCpyZXNwKSk7XG4mIzQzO1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXJlY3YocHNlLCByZXEsIHJlc3ApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IGhhcm1sZXNzXG4mIzQzO1x0ICogdG8gY2hlY2sgZm9yIEdlbjIgdG9vKS4gQ2F0Y2ggdGhlc2UgYmVmb3JlIHRoZSBnZW5lcmljIG9wY29kZS9DUkNcbiYjNDM7XHQgKiBtaXNtYXRjaCBwYXRoIHNvIGNhbGxlcnMgc2VlIGEgbWVhbmluZ2Z1bCBlcnJuby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKHJlc3AtXHUwMDNlb3Bjb2RlKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6XG4mIzQzO1x0XHRyZXR1cm4gLUVCQURFO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTpcbiYjNDM7XHRcdHJldHVybiAtRUJBRE1TRztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmVzcC1cdTAwM2VvcGNvZGUgIT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuJiM0MztcdCAgICByZXNwLVx1MDAzZXNlcV9udW0gIT0gcmVxLVx1MDAzZXNlcV9udW0gfHxcbiYjNDM7XHQgICAgcmVzcC1cdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4mIzQzO1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgcmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyZXNwLVx1MDAzZXBheWxvYWRbMF0gIT0gcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9jbWQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsIHU4IGFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuJiM0MztcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcbiYjNDM7XHRyZXEucGF5bG9hZFsxXSA9IGFyZztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocmVzcC5wYXlsb2FkWzBdICE9IHBvcnQgfHwgcmVzcC5wYXlsb2FkWzFdICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEdsb2JhbCBvcGVyYXRpb25zICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvKHJlc3AucGF5bG9hZCwgaW5mbyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgKmNvbmZpZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2V1dmxvID0gcmVzcC5wYXlsb2FkWzBdO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZW51bV9vZl9wc2VzID0gcmVzcC5wYXlsb2FkWzZdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMxID0gcmVzcC5wYXlsb2FkWzFdO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMzID0gcmVzcC5wYXlsb2FkWzNdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtZWFzdXJlbWVudC1cdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xuJiM0MztcdG1lYXN1cmVtZW50LVx1MDAzZWN1cnJlbnRfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFszXSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNldGVtcGVyYXR1cmVfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs1XSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZWVuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VtYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXByaW9yaXR5ID0gcmVzcC5wYXlsb2FkWzRdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUFNFIGNvbnRyb2xsZXIgb3BzICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0YWRtaW5fc3RhdGUtXHUwMDNlYzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDpcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfU0VBUkNISU5HO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19URVNUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVEVTVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVU5LTk9XTjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhXG4mIzQzO1x0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XG4mIzQzO1x0ICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXNcbiYjNDM7XHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlc1xuJiM0MztcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuJiM0MztcdFx0cmV0dXJuIHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MoXHUwMDI2c3RhdHVzKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiAxMDBtVyBwZXIgTFNCICovXG4mIzQzO1x0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiB1VjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFx1MDAyNm1lYXN1cmVtZW50KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogNjQuNDVtViBwZXIgTFNCICovXG4mIzQzO1x0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsIFx1MDAyNmNvbmZpZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVx1MDAzZWNoaXAtXHUwMDNlcHdfcmVhZF9sc2JfbVc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqdHlwZV9vcGMsICp2YWxfb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLVx1MDAzZWNoaXA7XG4mIzQzO1x0dTggcHJnX3ZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobWF4X21XIFx1MDAzYyAwIHx8IG1heF9tVyBcdTAwM2UgY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0dHlwZV9vcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXTtcbiYjNDM7XHR2YWxfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW2NoaXAtXHUwMDNlcHdfc2V0X2NtZF07XG4mIzQzO1x0LyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqL1xuJiM0MztcdGlmICghdHlwZV9vcGMtXHUwMDNldmFsaWQgfHwgIXZhbF9vcGMtXHUwMDNldmFsaWQgfHwgIWNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcbiYjNDM7XHQgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW5cbiYjNDM7XHQgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0XG4mIzQzO1x0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtXHUwMDNlb3AsIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLVx1MDAzZW9wLCBwcmdfdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlKTtcbiYjNDM7XHRpZiAoIXJhbmdlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJhbmdlWzBdLm1pbiA9IDA7XG4mIzQzO1x0cmFuZ2VbMF0ubWF4ID0gcHNlLVx1MDAzZWNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0O1xuJiM0MztcbiYjNDM7XHRvdXQtXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbmZpZy5wcmlvcml0eTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1xuJiM0MztcdGlmIChwcmlvIFx1MDAzZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy1cdTAwM2VvcCwgcHJpbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfb3BzIHJ0cHNlX21jdV9vcHMgPSB7XG4mIzQzO1x0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcbiYjNDM7XHQucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsXG4mIzQzO1x0LnBpX2dldF9wd19jbGFzcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyxcbiYjNDM7XHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXG4mIzQzO1x0LnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSxcbiYjNDM7XHQucGlfZGlzYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUsXG4mIzQzO1x0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXG4mIzQzO1x0LnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCxcbiYjNDM7XHQucGlfc2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0LFxuJiM0MztcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcbiYjNDM7XHQucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyxcbiYjNDM7XHQucGlfc2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2Rpc2NvdmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgZXh0X2NvbmZpZztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXG4mIzQzO1x0ICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhXG4mIzQzO1x0ICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhXG4mIzQzO1x0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUyk7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FVElNRURPVVQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5YSU8gXHUwMDI2XHUwMDI2IHJldCAhPSAtRVJFTU9URUlPIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVCQURNU0cgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUJBREUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0bXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTtcbiYjNDM7XHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBpbmZvXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpbmZvLVx1MDAzZWRldmljZV9pZCkge1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOGJfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxuJiM0MztcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM5X2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzljX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTExX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTIxX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCwgXCYjMzQ7dW5rbm93biBQU0UgaWQgMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZGV2aWNlX2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VtYXhfcG9ydHMgfHwgaW5mby1cdTAwM2VtYXhfcG9ydHMgXHUwMDNlIFJUUFNFX01DVV9NQVhfUE9SVFMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7TUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XFxuXCYjMzQ7LCBpbmZvLVx1MDAzZW1heF9wb3J0cyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsIFx1MDAyNmV4dF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm8ocHNlLVx1MDAzZWRldiwgXCYjMzQ7JXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0IHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cihpbmZvLVx1MDAzZW1jdV90eXBlKSwgcHNlLVx1MDAzZWNoaXAtXHUwMDNlbmFtZSxcbiYjNDM7XHRcdCBpbmZvLVx1MDAzZWRldmljZV9pZCwgaW5mby1cdTAwM2VtYXhfcG9ydHMsIGV4dF9jb25maWcubnVtX29mX3BzZXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShwc2UtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIW1hdGNoKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVOT0RFViwgXCYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXFxuXCYjMzQ7KTtcbiYjNDM7XHRwc2UtXHUwMDNlZGlhbGVjdCA9IG1hdGNoLVx1MDAzZWRpYWxlY3Q7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0XG4mIzQzO1x0ICogcHJvYmUgdGltZSwgcmF0aGVyIHRoYW4gTlVMTC1kZXJlZiYjMzk7aW5nIGxhdGVyIGZyb20gYSBmYXN0IHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwc2UtXHUwMDNlZGlhbGVjdCB8fFxuJiM0MztcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8gfHxcbiYjNDM7XHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MgfHxcbiYjNDM7XHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cilcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlbGVhc2UgdGhlIE1DVSBmcm9tIHJlc2V0IGJlZm9yZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb247IHRoZVxuJiM0MztcdCAqIGJvb3QtcmV0cnkgbG9vcCBpbiBkaXNjb3ZlcigpIHdhaXRzIGZvciBpdCB0byBhbnN3ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z3Bpb2QgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXHUwMDNlZGV2LCBcJiMzNDtyZXNldFwmIzM0OywgR1BJT0RfT1VUX0xPVyk7XG4mIzQzO1x0aWYgKElTX0VSUihncGlvZCkpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcmVzZXQgZ3Bpb1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU29tZSBib2FyZHMgZ2F0ZSBhbGwgcG9ydHMgdGhyb3VnaCBhIGhhcmR3YXJlIGxpbmU7IGRlYXNzZXJ0IGl0IHNvXG4mIzQzO1x0ICogdGhlIE1DVSBwcm90b2NvbCBnb3Zlcm5zIHBlci1wb3J0IGFkbWluIHN0YXRlIGZyb20gaGVyZSBvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRncGlvZCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHBzZS1cdTAwM2VkZXYsIFwmIzM0O2Rpc2FibGUtcG9ydHNcJiMzNDssIEdQSU9EX09VVF9MT1cpO1xuJiM0MztcdGlmIChJU19FUlIoZ3Bpb2QpKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgUFRSX0VSUihncGlvZCksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IGRpc2FibGUtcG9ydHMgZ3Bpb1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkge1xuJiM0MztcdFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcbiYjNDM7XHRcdC8qIERpYWxlY3RzIHdpdGhvdXQgYSBnbG9iYWwtc3RhdGUgY29uY2VwdCAoZS5nLiBHZW4xKSByZXR1cm5cbiYjNDM7XHRcdCAqIC1FT1BOT1RTVVBQOyB0cmVhdCB0aGF0IGFzIFwmIzM0O25vIHNlcGFyYXRlIGVuYWJsZSByZXF1aXJlZFwmIzM0Oy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgUFNFIHN5c3RlbVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIXJldCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSwgcHNlKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEZXBlbmRpbmcgb24gdGhlIE1DVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnRcbiYjNDM7XHQgKiBmb3IgZXZlcnkgYm9hcmQpLCBpdCBpc24mIzM5O3Qga25vd24gd2hldGhlciB0aGUgUG9FIHN1YnN5c3RlbSBpcyBhY3RpdmUgb3JcbiYjNDM7XHQgKiBpbmFjdGl2ZSBieSBkZWZhdWx0LiBBdCB0aGlzIHN0YWdlLCB0aGUgUFNFIGNoaXBzIG1pZ2h0IGFscmVhZHkgZGVsaXZlclxuJiM0MztcdCAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdC8qIHBjZGV2Lm93bmVyIGlzIHNldCBieSB0aGUgdHJhbnNwb3J0LCBzbyB0aGUgcmVnaXN0ZXJlZCBjb250cm9sbGVyXG4mIzQzO1x0ICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2Lm9wcyAgICAgID0gXHUwMDI2cnRwc2VfbWN1X29wcztcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYuZGV2ICAgICAgPSBwc2UtXHUwMDNlZGV2O1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMztcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYubnJfbGluZXMgPSBpbmZvLm1heF9wb3J0cztcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZO1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocHNlLVx1MDAzZWRldiwgXHUwMDI2cHNlLVx1MDAzZXBjZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcmVnaXN0ZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbiYjNDM7XHRpbmZvLVx1MDAzZXN5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpO1xuJiM0MztcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuJiM0MztcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbiYjNDM7XHRpbmZvLVx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcbiYjNDM7XHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuJiM0MztcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHQvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovXG4mIzQzO1x0cmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtXHUwMDNlc3RzMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfZ2VuMl9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChtY3VfdHlwZSkge1xuJiM0MztcdGNhc2UgMHgwMDpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJGMzEwXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMTpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJGMjMwXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMjpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJGMzAzXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMzpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJGMTAzXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwNDpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJFMTAzXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgxMDpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE0wNTE2XCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgxMTpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE0wNTY0XCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgxMjpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE5VQzAyOVwmIzM0OztcbiYjNDM7XHRkZWZhdWx0Olx0cmV0dXJuIFwmIzM0O3Vua25vd25cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aW5mby1cdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xuJiM0MztcdC8qIEdlbjEgaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxuJiM0MztcdCAqIFwmIzM0O3JlbW90ZSBlbmFibGVcJiMzNDsgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcdTAwMjYgQklUKDIpKTtcbiYjNDM7XHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XG4mIzQzO1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4mIzQzO1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbiYjNDM7XHRpbmZvLVx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0LyogR2VuMSBwdXRzIHRoZSBkZXRlY3RlZCBjbGFzcyBpbiBwYXlsb2FkWzNdICg9PSBzdHMzKSBkaXJlY3RseS5cbiYjNDM7XHQgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlXG4mIzQzO1x0ICogbm9pc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHN0YXR1cy1cdTAwM2VzdHMzIFx1MDAyNiAweDBmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobWN1X3R5cGUpIHtcbiYjNDM7XHRjYXNlIDB4MDA6XHRyZXR1cm4gXCYjMzQ7U1QgTWljcm8gU1QzMkYxMDBcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwmIzM0O051dm90b24gTTA1eHggTEFOXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMjpcdHJldHVybiBcJiMzNDtTVCBNaWNybyBTVEYwMzBDOFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDM6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDU4U0FOXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwNDpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE5VQzEyMlwmIzM0OztcbiYjNDM7XHRkZWZhdWx0Olx0cmV0dXJuIFwmIzM0O3Vua25vd25cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiA9IHtcbiYjNDM7XHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbyxcbiYjNDM7XHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLFxuJiM0MztcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cixcbiYjNDM7XHQub3Bjb2RlID0ge1xuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cdD0gUlRQU0VfTUNVX09QKDB4MDApLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDRhKSxcbiYjNDM7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDEyKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldXHQ9IFJUUFNFX01DVV9PUCgweDE1KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cdD0gUlRQU0VfTUNVX09QKDB4NDQpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQ4KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDQ5KSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0ge1xuJiM0MztcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvLFxuJiM0MztcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MsXG4mIzQzO1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLFxuJiM0MztcdC5vcGNvZGUgPSB7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4MjApLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxuJiM0MztcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdXHQ9IFJUUFNFX01DVV9PUCgweDE2KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4MjEpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXHQ9IFJUUFNFX01DVV9PUCgweDMwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyNSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHgyNiksXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhID0ge1xuJiM0MztcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjFfZGF0YSk7XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YSA9IHtcbiYjNDM7XHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2RhdGEpO1xuJiM0MztcbiYjNDM7LyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqL1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgPSB7XG4mIzQzO1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxuJiM0MztcdC5uYXRpdmVfaTJjID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKGNvcmUpXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lMTBmOGM2MzNiNjhlY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xuQEAgLTAsMCAmIzQzOzEsMTcwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvXG4mIzQzOyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXG4mIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbiYjNDM7ICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcdChSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUylcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdC8qIFNlbmQgb3Bjb2RlIGFzIFNNQnVzIGNvbW1hbmQgYnl0ZTsgcmVtYWluaW5nIDExIGJ5dGVzIGFzIGJsb2NrIGRhdGEgKi9cbiYjNDM7XHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSAmIzQzOyAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1x0aW50IHRyaWVzLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRyaWVzIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUNVIG5lZWRzIDB4MDAgYXMgY29tbWFuZCBieXRlIGZvciByZWFkICovXG4mIzQzO1x0XHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAodTggKilyZXNwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSBcdTAwMjZcdTAwMjYgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdHZvaWQgKmJ1ZjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBpMmNfbWFzdGVyX3NlbmQoKSBtYXkgRE1BLCBzbyB0aGUgYnVmZmVyIG11c3Qgbm90IGJlIG9uIHRoZSBzdGFjay4gKi9cbiYjNDM7XHRidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1x0a2ZyZWUoYnVmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGludCB0cmllcywgcmV0O1xuJiM0MztcdHU4ICpidWY7XG4mIzQzO1xuJiM0MztcdC8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqL1xuJiM0MztcdGJ1ZiA9IGttYWxsb2MoUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0cmllcyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUpIHtcbiYjNDM7XHRcdFx0bWVtY3B5KHJlc3AsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRcdFx0aWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IC1FVElNRURPVVQ7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShidWYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzID0ge1xuJiM0MztcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcbiYjNDM7XHRib29sIHVzZV9uYXRpdmU7XG4mIzQzO1xuJiM0MztcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4mIzQzO1x0aWYgKCFtYXRjaClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgXCYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZyYW1pbmcgKHJhdyBJMkMgdnMgU01CdXMpIGlzIGNhcnJpZWQgYnkgdGhlIG1hdGNoIGRhdGEuICovXG4mIzQzO1x0dXNlX25hdGl2ZSA9IG1hdGNoLVx1MDAzZW5hdGl2ZV9pMmM7XG4mIzQzO1x0aWYgKHVzZV9uYXRpdmUpIHtcbiYjNDM7XHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVPUE5PVFNVUFAsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7cGxhaW4tSTJDIE1DVSBwcm90b2NvbCByZXF1aXJlcyBJMkMtY2FwYWJsZSBhZGFwdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXHUwMDNlYWRhcHRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLIHxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0spKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuJiM0MztcdFx0XHRcdFwmIzM0O1NNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHNlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBzZS1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzQzO1x0cHNlLVx1MDAzZXRyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyBcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcdTAwMjZydHBzZV9tY3VfaTJjX3NtYnVzX29wcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3Rlcihwc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfaTJjX29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgfSxcbiYjNDM7XHR7IC8qIHNlbnRpbmVsICovIH1cbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X2kyY19vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRwc2VfbWN1X2kyY19kcml2ZXIgPSB7XG4mIzQzO1x0LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lXHRcdD0gXCYjMzQ7cmVhbHRlay1wc2UtbWN1LWkyY1wmIzM0OyxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZVx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2JlXHRcdD0gcnRwc2VfbWN1X2kyY19wcm9iZSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX2kyY19kcml2ZXIocnRwc2VfbWN1X2kyY19kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjliYWExN2Q4ZDMxZmEyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xuQEAgLTAsMCAmIzQzOzEsMTY0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcmRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JlYWx0ZWstcHNlLW1jdS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFx0MTkyMDBcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKDEwMClcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCBwc2U7XG4mIzQzO1x0c3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldjtcbiYjNDM7XHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xuJiM0MztcdHNwaW5sb2NrX3QgcnhfbG9jaztcdFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cbiYjNDM7XHRzaXplX3QgcnhfbGVuO1xuJiM0MztcdHU4IHJ4X2J1ZltSVFBTRV9NQ1VfTVNHX1NJWkVdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSB0b19ydHBzZV9tY3VfdWFydChwKSAgY29udGFpbmVyX29mKHAsIHN0cnVjdCBydHBzZV9tY3VfdWFydCwgcHNlKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTm8gZnJhbWluZyBpcyBkb25lIGhlcmU6IGEgZ2xpdGNoZWQgZnJhbWUgY29zdHMgb25lIHRyYW5zYWN0aW9uLCB0aGVuXG4mIzQzOyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50XG4mIzQzOyAqIChub3QgdGFrZSksIGRyb3BwaW5nIGFueSBvdmVyZmxvdyBzbyBzZXJkZXYga2VlcHMgbm8gbGVmdG92ZXIgdG8gYmxlZWRcbiYjNDM7ICogaW50byB0aGUgbmV4dCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzaXplX3QgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7XG4mIzQzO1x0c2l6ZV90IHRha2U7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0dGFrZSA9IG1pbihjb3VudCwgc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpIC0gY3R4LVx1MDAzZXJ4X2xlbik7XG4mIzQzO1x0XHRpZiAodGFrZSkge1xuJiM0MztcdFx0XHRtZW1jcHkoY3R4LVx1MDAzZXJ4X2J1ZiAmIzQzOyBjdHgtXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlcnhfbGVuICYjNDM7PSB0YWtlO1xuJiM0MztcdFx0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiA9PSBzaXplb2YoY3R4LVx1MDAzZXJ4X2J1ZikpXG4mIzQzO1x0XHRcdFx0Y29tcGxldGUoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0ge1xuJiM0MztcdC5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsXG4mIzQzO1x0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuJiM0MztcdGludCB3cml0dGVuO1xuJiM0MztcbiYjNDM7XHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJ4X2xlbiA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXHUwMDNlc2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSxcbiYjNDM7XHRcdFx0XHQgICAgICBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUKTtcbiYjNDM7XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB3cml0dGVuO1xuJiM0MztcdGlmICh3cml0dGVuICE9IHNpemVvZigqcmVxKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfdWFydF9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSwgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiAhPSBzaXplb2YoKnJlc3ApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkocmVzcCwgY3R4LVx1MDAzZXJ4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XG4mIzQzO1x0LnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLFxuJiM0MztcdC5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbiYjNDM7e1xuJiM0MztcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzZXJkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4O1xuJiM0MztcdHVuc2lnbmVkIGludCBiYXVkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXNlcmRldiA9IHNlcmRldjtcbiYjNDM7XHRjdHgtXHUwMDNlcHNlLmRldiA9IGRldjtcbiYjNDM7XHRjdHgtXHUwMDNlcHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzQzO1x0Y3R4LVx1MDAzZXBzZS50cmFuc3BvcnQgPSBcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xuJiM0MztcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9kcnZkYXRhKHNlcmRldiwgY3R4KTtcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwgXHUwMDI2cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fc2VyZGV2X2RldmljZV9vcGVuKGRldiwgc2VyZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBvcGVuIHNlcmRldlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksIFwmIzM0O2N1cnJlbnQtc3BlZWRcJiMzNDssIFx1MDAyNnNwZWVkKTtcbiYjNDM7XG4mIzQzO1x0YmF1ZCA9IHNlcmRldl9kZXZpY2Vfc2V0X2JhdWRyYXRlKHNlcmRldiwgc3BlZWQpO1xuJiM0MztcdGlmIChiYXVkICE9IHNwZWVkKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtjb3VsZCBub3Qgc2V0IGJhdWRyYXRlICV1LCBjb250cm9sbGVyIHVzZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBzcGVlZCwgYmF1ZCk7XG4mIzQzO1xuJiM0MztcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChzZXJkZXYsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2VyZGV2X2RldmljZV9zZXRfcGFyaXR5KHNlcmRldiwgU0VSREVWX1BBUklUWV9OT05FKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtjb3VsZCBub3Qgc2V0IHBhcml0eSB0byBub25lOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcihcdTAwMjZjdHgtXHUwMDNlcHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjFcJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjFfZGF0YSB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMlwmIzM0OywgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfZ2VuMl9kYXRhIH0sXG4mIzQzO1x0eyAvKiBzZW50aW5lbCAqLyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9kcml2ZXIgcnRwc2VfbWN1X3VhcnRfZHJpdmVyID0ge1xuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3JlYWx0ZWstcHNlLW1jdS11YXJ0XCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXG4mIzQzO1x0fSxcbiYjNDM7XHQucHJvYmUgID0gcnRwc2VfbWN1X3VhcnRfcHJvYmUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9zZXJkZXZfZGV2aWNlX2RyaXZlcihydHBzZV9tY3VfdWFydF9kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBhMzE5N2M5YzljZDFkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmhcbkBAIC0wLDAgJiM0MzsxLDg5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxuJiM0MzsjZGVmaW5lIF9SRUFMVEVLX1BTRV9NQ1VfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGltZSB0aGUgTUNVIGl0c2VsZiBuZWVkcyBiZXR3ZWVuIGFjY2VwdGluZyBhIHJlcXVlc3QgYW5kIGhhdmluZyBhXG4mIzQzOyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXG4mIzQzOyAqIHVuZGVybHlpbmcgdHJhbnNwb3J0OiB0aGUgY29yZSBwYWNlcyB0cmFuc2FjdGlvbnMgYnkgUlRQU0VfTUNVX1JFU1BPTlNFX01TXG4mIzQzOyAqIGFuZCBib3RoIHRyYW5zcG9ydHMgc2l6ZSB0aGVpciBwZXItdHJhbnNhY3Rpb24gcmVjdiBjZWlsaW5nIGZyb21cbiYjNDM7ICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xuJiM0MzsgKiBuZWVkaW5nIHVwIHRvIH4xcyB0byBwcm9kdWNlIGEgcmVwbHkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1x0XHRcdDI1XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NU1x0XHQxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUb3RhbCB0aW1lIHRvIGtlZXAgcmV0cnlpbmcgdGhlIGZpcnN0IE1DVSByZWFkIGF0IHByb2JlLCBhbmQgdGhlIHBhdXNlXG4mIzQzOyAqIGJldHdlZW4gYXR0ZW1wdHMuIFJpZ2h0IGFmdGVyIGVuYWJsZS1ncGlvcyBpcyBhc3NlcnRlZCB0aGUgTUNVIG1heSBub3RcbiYjNDM7ICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcbiYjNDM7ICogZGVjbGFyaW5nIHRoZSBwcm9iZSBmYWlsZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcdFx0MzAwMFxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9CT09UX1JFVFJZX01TXHRcdFx0MTAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVx0XHRcdDEyXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X21zZyB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHNlcV9udW07XG4mIzQzO1x0dTggcGF5bG9hZFs5XTtcbiYjNDM7XHR1OCBjaGVja3N1bTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1DVSBzdGF0dXMgb3Bjb2RlcyAoc2VlbiBvbiB0aGUgR2VuMSBkaWFsZWN0OyBHZW4yIG5ldmVyIGVtaXRzIHRoZW0pLlxuJiM0MzsgKiBJTkNPTVBMRVRFL0JBRF9DU1VNIGFyZSB0ZXJtaW5hbDsgTk9UX1JFQURZIGlzIHRyYW5zaWVudC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXHRcdDB4ZmRcdC8qIC1FQkFERSAgICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTVx0XHQweGZlXHQvKiAtRUJBRE1TRyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZXHRcdDB4ZmZcdC8qIC1FQUdBSU4gICovXG4mIzQzO1xuJiM0MzsvKiBBIHBvbGxpbmcgdHJhbnNwb3J0IGNhbiBzdG9wIGhlcmU6IHRoZSBtYXRjaGluZyByZXBseSwgb3IgYSB0ZXJtaW5hbCBlcnJvci4gKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZXNwLVx1MDAzZW9wY29kZSA9PSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4mIzQzO1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURSB8fFxuJiM0MztcdCAgICAgICByZXNwLVx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovXG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdDtcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm87XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybDtcbiYjNDM7XG4mIzQzOy8qIFBlci1jb21wYXRpYmxlIG1hdGNoIGRhdGEgKHRoZSBvZl9tYXRjaCAuZGF0YSkuICovXG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xuJiM0MztcdGJvb2wgbmF0aXZlX2kyYztcdC8qIHJhdy1JMkMgZnJhbWluZyAodnMgU01CdXMpOyBJMkMgdHJhbnNwb3J0IG9ubHkgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyB7XG4mIzQzO1x0aW50ICgqc2VuZCkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpO1xuJiM0MztcdGludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybCB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XG4mIzQzO1x0c3RydWN0IG11dGV4IG11dGV4OyAvKiBzZXJpYWxpemVzIE1DVSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zYWN0aW9ucyAqL1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgKnRyYW5zcG9ydDtcbiYjNDM7XHR1OCBzZXE7XHRcdFx0Lyogcm9sbGluZyByZXF1ZXN0IHNlcV9udW0sIGVjaG9lZCBieSB0aGUgTUNVICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKTtcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjFfZGF0YTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9kYXRhO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhO1xuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDE6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OywKICAgICYjMzQ7U0VSSUFMX0RFVl9CVVMmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCBzdXBwb3J0aW5nIGJvdGggSTJDIGFuZCBVQVJUIHRyYW5zcG9ydHMuIFRoZSBkcml2ZXIgZXhwb3NlcyBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBuZXRsaW5rIGFuZCBwYXJzZXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2Ugb3ZlciBJMkMvVUFSVC4gSXQgY2FuIGJlIHByb2JlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3IgSTJDIHN5c2ZzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI4NmMyMTY2MjA1OWRhNDgxZTcxOWFiOWFkYWVhZTg3N2EwNjgxZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAwMToxNToxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wZjFhODE5ZGI0OWJiYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWwKQEAgLTAsMCAmIzQzOzEsMTgwIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFJlYWx0ZWsgUFNFIE1DVQomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkKJiM0MzsgIGhhcmR3YXJlIG9uIGEgcmFuZ2Ugb2YgbWFuYWdlZCBQb0Ugc3dpdGNoZXMuIFRoZSBob3N0IENQVSB0YWxrcyBvbmx5IHRvCiYjNDM7ICB0aGlzIE1DVSAtIG92ZXIgSTJDL1NNQnVzIG9yIFVBUlQgLSB1c2luZyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7CiYjNDM7ICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkCiYjNDM7ICBkaXJlY3RseS4gRm9yIGV4YW1wbGUsIG9uIHRoZSBaeXhlbCBHUzE5MDAtMTBIUCB0aGUgU29DIHJlYWNoZXMgdGhlIE1DVQomIzQzOyAgb3ZlciBVQVJULCBhbmQgdGhlIE1DVSBtYW5hZ2VzIHRoZSBvbi1ib2FyZCBQU0UgY2hpcC4KJiM0MzsKJiM0MzsgIFRoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIE1DVSB0b2dldGhlciB3aXRoIGl0cyBSZWFsdGVrIGZpcm13YXJlOiB0aGUKJiM0MzsgIGZpcm13YXJlIGFuZCBpdHMgaG9zdCBwcm90b2NvbCwgd2hpY2ggYXJlIHN0YWJsZSBhY3Jvc3MgYm9hcmRzLiBUaGUKJiM0MzsgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGUKJiM0MzsgIFBTRSBzaWxpY29uIGJlaGluZCB0aGUgTUNVIChSZWFsdGVrIFJUTDgyM3gvUlRMODIzOSogb3IgQnJvYWRjb20KJiM0MzsgIEJDTTU5eHh4KSBpcyByZXBvcnRlZCBieSB0aGUgTUNVIGFuZCBkZXRlY3RlZCBhdCBydW50aW1lIC0gbmVpdGhlciBpcwomIzQzOyAgbmFtZWQgaGVyZS4KJiM0MzsKJiM0MzsgIFR3byBwcm90b2NvbCBnZW5lcmF0aW9ucyBleGlzdCwgYm90aCBSZWFsdGVrJiMzOTtzOgomIzQzOyAgICBnZW4xICBvbGRlciBib2FyZHMsIHdoZXJlIHRoZSBNQ1UgZnJvbnRzIEJyb2FkY29tIFBTRSBzaWxpY29uCiYjNDM7ICAgIGdlbjIgIHRoZSBhbHRlcmVkIHByb3RvY29sIHVzZWQgd2l0aCBSZWFsdGVrJiMzOTtzIG93biBQU0Ugc2lsaWNvbgomIzQzOwomIzQzOyAgT24gYW4gSTJDIGF0dGFjaG1lbnQgdGhlIGZyYW1pbmcgdGhlIE1DVSBmaXJtd2FyZSBleHBlY3RzIGlzIHBhcnQgb2YgdGhlCiYjNDM7ICBjb21wYXRpYmxlOiAmIzM5Oy1zbWJ1cyYjMzk7IChyZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlIGFuZCBhIHJlcGVhdGVkCiYjNDM7ICBzdGFydCkgb3IgJiMzOTstaTJjJiMzOTsgKGJhcmUgYmxvY2sgd3JpdGVzIGFuZCByZWFkcykuIEEgVUFSVCBhdHRhY2htZW50IGNhcnJpZXMKJiM0MzsgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJiMzOTtzZXJpYWwmIzM5OyBub2RlLgomIzQzOwomIzQzOyAgRWFjaCBib2FyZCBhZGRpdGlvbmFsbHkgY2FycmllcyBhIGRldmljZS1zcGVjaWZpYyBjb21wYXRpYmxlIHRoYXQgZmFsbHMKJiM0MzsgIGJhY2sgdG8gb25lIG9mIHRoZSBwcm90b2NvbCBjb21wYXRpYmxlcyBhYm92ZS4gRHJpdmVycyBiaW5kIG9uIHRoZQomIzQzOyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kCiYjNDM7ICByZXNlcnZlcyBhIHBsYWNlIGZvciBhIGZ1dHVyZSBwZXItYm9hcmQgcXVpcmsgd2l0aG91dCBoYXZpbmcgdG8gcmV0cm9maXQKJiM0MzsgIGRldmljZSB0cmVlcyBhbHJlYWR5IGluIHRoZSBmaWVsZC4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgb25lT2Y6CiYjNDM7ICAgICAgIyBVQVJUCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1hMS1wc2UKJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjEKJiM0MzsKJiM0MzsgICAgICAjIEkyQywgU01CdXMgZnJhbWluZwomIzQzOyAgICAgIC0gaXRlbXM6CiYjNDM7ICAgICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTIwLTI0aHAtdjItcHNlCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzCiYjNDM7CiYjNDM7ICAgICAgIyBVQVJUCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1iMS1wc2UKJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwseG1nMTkxNS0xMGVwLXBzZQomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMgomIzQzOwomIzQzOyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCx4czE5MzAtMTJocC1wc2UKJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXMKJiM0MzsKJiM0MzsgICAgICAjIEkyQywgcmF3IGZyYW1pbmcKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIGxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZQomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHJlc2V0LWdwaW9zOgomIzQzOyAgICBkZXNjcmlwdGlvbjogUmVzZXQgbGluZSBvZiB0aGUgTUNVLgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgZGlzYWJsZS1wb3J0cy1ncGlvczoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgSGFyZHdhcmUgZ2F0ZSB0aGF0IGZvcmNlcyBhbGwgcG9ydHMgaW50byBhZG1pbi1kaXNhYmxlZCBzdGF0ZSB3aGlsZQomIzQzOyAgICAgIGFzc2VydGVkLgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjCiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NlcmlhbC9zZXJpYWwtcGVyaXBoZXJhbC1wcm9wcy55YW1sIwomIzQzOyAgIyBBICYjMzk7LXNtYnVzJiMzOTsvJiMzOTstaTJjJiMzOTsgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICYjMzk7cmVnJiMzOTsgYW5kCiYjNDM7ICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlQKJiM0MzsgICMgYXR0YWNobWVudDogbm8gJiMzOTtyZWcmIzM5OywgdGhlIHRyYW5zcG9ydCBjb21lcyBmcm9tIHRoZSBwYXJlbnQgc2VyaWFsIG5vZGUuCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1cwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gcmVnCiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlCiYjNDM7ICAgICAgICBtYXgtc3BlZWQ6IGZhbHNlCiYjNDM7ICAgIGVsc2U6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHJlZzogZmFsc2UKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudAomIzQzOyAgLSB8CiYjNDM7ICAgIGkyYyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt6eXhlbCx4czE5MzAtMTJocC1wc2UmIzM0OywgJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cyYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDIwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBwc2UtcGlzIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50CiYjNDM7ICAtIHwKJiM0MzsgICAgaTJjIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2xpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZSYjMzQ7LCAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyYyYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDIwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBwc2UtcGlzIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgIyBVQVJUIGF0dGFjaG1lbnQKJiM0MzsgIC0gfAomIzQzOyAgICBzZXJpYWwgewomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt6eXhlbCxnczE5MDAtMTBocC1hMS1wc2UmIzM0OywgJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMSYjMzQ7OwomIzQzOyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSAmbHQ7MTkyMDAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBzZS1waXMgewomIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDYwY2ZmMDA5NTNkY2JlLi4xNjEzNmFjMTFlMDYzNyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIyNzM2LDYgJiM0MzsyMjczNiwxMyBAQCBTOglNYWludGFpbmVkCiBGOglpbmNsdWRlL3NvdW5kL3J0Ki5oCiBGOglzb3VuZC9zb2MvY29kZWNzL3J0KgogCiYjNDM7UkVBTFRFSyBQU0UgTUNVIERSSVZFUgomIzQzO006CUpvbmFzIEplbG9uZWsgJmx0O2plbG9uZWsuam9uYXNAZ21haWwuY29tJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbAomIzQzO0Y6CWRyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UqCiYjNDM7CiBSRUFMVEVLIE9UVE8gV0FUQ0hET0cKIE06CVNhbmRlciBWYW5oZXVsZSAmbHQ7c2FuZGVyQHN2YW5oZXVsZS5uZXQmZ3Q7CiBMOglsaW51eC13YXRjaGRvZ0B2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcKaW5kZXggN2VmMjk2NTdlZTVkZDEuLmEwZjJhZTY2OGM2N2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZwpAQCAtMTMsNiAmIzQzOzEzLDM0IEBAIG1lbnVjb25maWcgUFNFX0NPTlRST0xMRVIKIAogaWYgUFNFX0NPTlRST0xMRVIKIAomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1UKJiM0MzsJdHJpc3RhdGUKJiM0MzsJaGVscAomIzQzOwkgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVIGRyaXZlci4gVGhpcyBpcyBzZWxlY3RlZAomIzQzOwkgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LgomIzQzOwomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDCiYjNDM7CXRyaXN0YXRlICYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydCkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEkyQwomIzQzOwlzZWxlY3QgUFNFX1JFQUxURUtfTUNVCiYjNDM7CWhlbHAKJiM0MzsJICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRQomIzQzOwkgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZAomIzQzOwkgIHZpYSBJMkMvU01CdXMuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwKJiM0MzsJICBQU0Ugc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYQomIzQzOwkgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLgomIzQzOwomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfVUFSVAomIzQzOwl0cmlzdGF0ZSAmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVMKJiM0MzsJc2VsZWN0IFBTRV9SRUFMVEVLX01DVQomIzQzOwloZWxwCiYjNDM7CSAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0UKJiM0MzsJICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWQKJiM0MzsJICB2aWEgVUFSVC4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbCBQU0UKJiM0MzsJICBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhCiYjNDM7CSAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LgomIzQzOwogY29uZmlnIFBTRV9SRUdVTEFUT1IKIAl0cmlzdGF0ZSAmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlciYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlCmluZGV4IGNjNzhmN2VhN2Y1ZjcxLi45Y2NhNTkwMGZlMzQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQpAQCAtMyw2ICYjNDM7Myw5IEBACiAKIG9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgJiM0Mzs9IHBzZV9jb3JlLm8KIAomIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtY29yZS5vCiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkMpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtaTJjLm8KJiM0MztvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX1VBUlQpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtdWFydC5vCiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgJiM0Mzs9IHBzZV9yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSAmIzQzOz0gcGQ2OTJ4MC5vCiBvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgJiM0Mzs9IHNpMzQ3NC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MjA0Y2I0MzBmZmVhOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jCkBAIC0wLDAgJiM0MzsxLDk4OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUFNFIHNpbGljb24gb24gdmFyaW91cwomIzQzOyAqIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcy4gVGhlIE1DVSBzcGVha3MgYSAxMi1ieXRlIGZpeGVkLWZyYW1lCiYjNDM7ICogbWFuYWdlbWVudCBwcm90b2NvbDsgdGhpcyBkcml2ZXIgY292ZXJzIHR3byBnZW5lcmF0aW9ucyBvZiB0aGUKJiM0MzsgKiBwcm90b2NvbCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGUgdGFibGUgYW5kIHJlc3BvbnNlIHBhcnNlcnMuCiYjNDM7ICoKJiM0MzsgKiBNYW55IFBvRSBzd2l0Y2ggZGVzaWducyBwdXQgYSBkZWRpY2F0ZWQgbWljcm9jb250cm9sbGVyIGluIGZyb250IG9mIHRoZQomIzQzOyAqIGFjdHVhbCBQU0Ugc2lsaWNvbjogdGhlIGhvc3QgQ1BVIHRhbGtzIHRvIHRoZSBNQ1Ugb3ZlciBJMkMvU01CdXMgb3IKJiM0MzsgKiBVQVJULCBhbmQgdGhlIE1DVSBpbiB0dXJuIG1hbmFnZXMgdGhlIFBTRSBjaGlwcyBvbiB0aGUgYm9hcmQuIFRoZSBNQ1UKJiM0MzsgKiBzcGVha3MgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdAomIzQzOyAqIGFjY2Vzc2VkIGRpcmVjdGx5OyBldmVyeXRoaW5nIGdvZXMgdGhyb3VnaCBNQ1UgY29tbWFuZHMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuCiYjNDM7ICogVHdvIGdlbmVyYXRpb25zIGFyZSBzdXBwb3J0ZWQ6IEdlbjEgYmVpbmcgdXNlZCBvbiBvbGRlciBzd2l0Y2hlcyB3aGVyZQomIzQzOyAqIHRoZSBNQ1UgZnJvbnRzIGFuZCBtYW5hZ2VzIEJyb2FkY29tIFBTRSBzaWxpY29uOyBHZW4yIGJlaW5nIHVzZWQgd2l0aAomIzQzOyAqIFJlYWx0ZWsgUFNFIHNpbGljb24uIFRoZSB0d28gc2hhcmUgZnJhbWUgZm9ybWF0IGFuZCBhIHN1bS1tb2QtMjU2CiYjNDM7ICogY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnMgYW5kIG9uIGEgZmV3IHJlc3BvbnNlIGxheW91dHM7CiYjNDM7ICogdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwZXItZGlhbGVjdCBvcGNvZGUgdGFibGUgYW5kIHBhcnNlciBob29rcy4KJiM0MzsgKgomIzQzOyAqIE91dCBvZiBzY29wZTogUFNFIGNoaXBzIHRoYXQgYXJlIGludGVyZmFjZWQgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdAomIzQzOyAqIHdpdGhvdXQgYSBtYW5hZ2VtZW50IE1DVSwgTUNVIGRlc2lnbnMgdGhhdCBzcGVhayBhbiB1bnJlbGF0ZWQgcHJvdG9jb2wKJiM0MzsgKiBmYW1pbHksIGFuZCAmIzM0O2R1bWIgUFNFJiMzNDsgbW9kZXMgd2hlcmUgbm8gaG9zdCBjb250cm9sIGlzIHdpcmVkIHVwIGF0IGFsbC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgY29yZSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wsIGRlY29kaW5nL2VuY29kaW5nIG9mIE1DVQomIzQzOyAqIHJlc3BvbnNlcywgYW5kIHRoZSBwc2VfY29udHJvbGxlcl9vcHMgaW50ZWdyYXRpb24uIFRyYW5zcG9ydCBtb2R1bGVzCiYjNDM7ICogKHJlYWx0ZWstcHNlLW1jdS1pMmMsIHJlYWx0ZWstcHNlLW1jdS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3YKJiM0MzsgKiBjYWxsYmFja3MuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2dwaW8vY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvamlmZmllcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taW5tYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtyZWFsdGVrLXBzZS1tY3UuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCCQkweDAxMzgKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOQkJMHgwMDM5CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDCQkweDAxMzkKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEJCTB4ZTExMQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMQkJMHhlMTIxCiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQJCTB4MDAKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkcJCTB4MDEKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HCQkweDAyCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVAkJCTB4MDMJLyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQJCTB4MDQKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVAkJMHgwNQkvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HCQkweDA2CiYjNDM7CiYjNDM7LyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIJMHgwMgomIzQzOwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUUwkJCTQ4CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkJCTMKJiM0MzsKJiM0MztlbnVtIHJ0cHNlX21jdV9jbWQgewomIzQzOwlSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsCiYjNDM7CVJUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPLAomIzQzOwlSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLAomIzQzOwomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVUywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUUywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUcsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJRywKJiM0MzsKJiM0MzsJUlRQU0VfTUNVX05VTV9DTURTLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgewomIzQzOwl1OCBvcDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKQl7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH0KJiM0MzsKJiM0MzsvKiBQYXJzZWQgTUNVIHJlc3BvbnNlIHN0cnVjdHVyZXMgKGRlY29kZWQgZnJvbSBydHBzZV9tY3VfbXNnIHJlcGxpZXMpICovCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9pbmZvIHsKJiM0MzsJdTggbWF4X3BvcnRzOwomIzQzOwlib29sIHN5c3RlbV9lbmFibGU7CiYjNDM7CXUxNiBkZXZpY2VfaWQ7CiYjNDM7CXU4IHN3X3ZlcjsKJiM0MzsJdTggbWN1X3R5cGU7CiYjNDM7CXU4IGNvbmZpZ19zdGF0dXM7CiYjNDM7CXU4IGV4dF92ZXI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgewomIzQzOwl1OCB1dmxvOwomIzQzOwl1OCBvdmxvOwomIzQzOwlib29sIHByZWFsbG9jX2VuYWJsZTsKJiM0MzsJdTggbnVtX29mX3BzZXM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHsKJiM0MzsJdTggc3RzMTsKJiM0MzsJdTggc3RzMjsKJiM0MzsJdTggc3RzMzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7CiYjNDM7CXUxNiB2b2x0YWdlX3JhdzsJLyogNjQuNDVtVi9MU0IgKi8KJiM0MzsJdTE2IGN1cnJlbnRfcmF3OwkvKiAxbUEvTFNCICovCiYjNDM7CXUxNiB0ZW1wZXJhdHVyZV9yYXc7CS8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovCiYjNDM7CXUxNiBwb3dlcl9yYXc7CQkvKiAxMDBtVy9MU0IgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgewomIzQzOwlib29sIGVuYWJsZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIHsKJiM0MzsJdTggbWF4X3Bvd2VyOwomIzQzOwl1OCBwcmlvcml0eTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCB7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIG9wY29kZVtSVFBTRV9NQ1VfTlVNX0NNRFNdOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2gKJiM0MzsJICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlCiYjNDM7CSAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssCiYjNDM7CSAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS4KJiM0MzsJICovCiYjNDM7CXZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7CiYjNDM7CWludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7CiYjNDM7CWNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwl1MTYgZGV2aWNlX2lkOwomIzQzOwl1MzIgbWF4X21XX3Blcl9wb3J0OwomIzQzOwllbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDsJLyogY29tbWFuZCB1c2VkIGJ5IHNldF9wd19saW1pdCAqLwomIzQzOwl1MzIgcHdfc2V0X2xzYl9tVzsJCS8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqLwomIzQzOwl1MzIgcHdfcmVhZF9sc2JfbVc7CQkvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7CiYjNDM7CS5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLAomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtSVEw4MjM4QiYjMzQ7LAomIzQzOwkucHdfcmVhZF9sc2JfbVcgPSAyMDAsCiYjNDM7CS5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSAyMDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5LAomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtSVEw4MjM5JiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDQwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSA0MDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O1JUTDgyMzlDJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDQwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSA0MDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O0JDTTU5MTExJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDIwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDIwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMSwKJiM0MzsJLyoKJiM0MzsJICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXQKJiM0MzsJICogYW5kIHRoZSBHZW4xIGRpYWxlY3QgaGFzIG9ubHkgdGhlIDgtYml0LzAuMlcgc2V0IGNvbW1hbmQgKCZsdDs9NTFXKTsKJiM0MzsJICogY2FwIGF0IHRoZSAzMFcgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IG9mZmVycy4KJiM0MzsJICovCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O0JDTTU5MTIxJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDIwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDIwMCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEhlbHBlcnMgYW5kIGJhc2ljIGZ1bmN0aW9ucyAqLwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpCiYjNDM7ewomIzQzOwltZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpOwomIzQzOwltc2ctJmd0O29wY29kZSA9IG9wY29kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU4IHJ0cHNlX21jdV9jaGVja3N1bShjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJdTggc3VtID0gMDsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbi0tKQomIzQzOwkJc3VtICYjNDM7PSAqYnVmJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIHN1bTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZG9feGZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3BzZS0mZ3Q7bXV0ZXgpIHsKJiM0MzsJCS8qIFJvbGxpbmcgc2VxX251bSBzbyBhIGxhdGUgcmVwbHkgY2FuJiMzOTt0IHBhc3MgYXMgYSBsYXRlciBvbmUuICovCiYjNDM7CQlyZXEtJmd0O3NlcV9udW0gPSBwc2UtJmd0O3NlcSYjNDM7JiM0Mzs7CiYjNDM7CQlyZXEtJmd0O2NoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7CiYjNDM7CiYjNDM7CQlyZXQgPSBwc2UtJmd0O3RyYW5zcG9ydC0mZ3Q7c2VuZChwc2UsIHJlcSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdAomIzQzOwkJICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG8KJiM0MzsJCSAqIHVzLiBQYWNlIHRoZSB0cmFuc2FjdGlvbiBoZXJlIHNvIGVhY2ggdHJhbnNwb3J0IGNhbiBrZWVwIGl0cyByZWN2CiYjNDM7CQkgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS4KJiM0MzsJCSAqLwomIzQzOwkJbXNsZWVwKFJUUFNFX01DVV9SRVNQT05TRV9NUyk7CiYjNDM7CiYjNDM7CQltZW1zZXQocmVzcCwgMCwgc2l6ZW9mKCpyZXNwKSk7CiYjNDM7CQlyZXQgPSBwc2UtJmd0O3RyYW5zcG9ydC0mZ3Q7cmVjdihwc2UsIHJlcSwgcmVzcCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IGhhcm1sZXNzCiYjNDM7CSAqIHRvIGNoZWNrIGZvciBHZW4yIHRvbykuIENhdGNoIHRoZXNlIGJlZm9yZSB0aGUgZ2VuZXJpYyBvcGNvZGUvQ1JDCiYjNDM7CSAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLgomIzQzOwkgKi8KJiM0MzsJc3dpdGNoIChyZXNwLSZndDtvcGNvZGUpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6CiYjNDM7CQlyZXR1cm4gLUVCQURFOwomIzQzOwljYXNlIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU06CiYjNDM7CQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFk6CiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmVzcC0mZ3Q7b3Bjb2RlICE9IHJlcS0mZ3Q7b3Bjb2RlIHx8CiYjNDM7CSAgICByZXNwLSZndDtzZXFfbnVtICE9IHJlcS0mZ3Q7c2VxX251bSB8fAomIzQzOwkgICAgcmVzcC0mZ3Q7Y2hlY2tzdW0gIT0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpKQomIzQzOwkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9xdWVyeShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwKJiM0MzsJCQkJc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3Bjb2RlKTsKJiM0MzsJcmVxLnBheWxvYWRbMF0gPSBwb3J0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCByZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNwLSZndDtwYXlsb2FkWzBdICE9IHBvcnQpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfY21kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLCB1OCBhcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3Bjb2RlKTsKJiM0MzsJcmVxLnBheWxvYWRbMF0gPSBwb3J0OwomIzQzOwlyZXEucGF5bG9hZFsxXSA9IGFyZzsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogR2xvYmFsIG9wZXJhdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wYy0mZ3Q7b3ApOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9zeXN0ZW1faW5mbyhyZXNwLnBheWxvYWQsIGluZm8pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3BjLSZndDtvcCk7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgJmFtcDtyZXEsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwljb25maWctJmd0O3V2bG8gPSByZXNwLnBheWxvYWRbMF07CiYjNDM7CWNvbmZpZy0mZ3Q7b3ZsbyA9IHJlc3AucGF5bG9hZFs1XTsKJiM0MzsJY29uZmlnLSZndDtwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7CiYjNDM7CWNvbmZpZy0mZ3Q7bnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3BjLSZndDtvcCk7CiYjNDM7CXJlcS5wYXlsb2FkWzBdID0gZW5hYmxlID8gMHgxIDogMHgwOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIChyZXNwLnBheWxvYWRbMF0gPT0gMHgwKSA/IDAgOiAtRUlPOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQb3J0IG9wZXJhdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN0YXR1cy0mZ3Q7c3RzMSA9IHJlc3AucGF5bG9hZFsxXTsKJiM0MzsJc3RhdHVzLSZndDtzdHMyID0gcmVzcC5wYXlsb2FkWzJdOwomIzQzOwlzdGF0dXMtJmd0O3N0czMgPSByZXNwLnBheWxvYWRbM107CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCQkgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW1lYXN1cmVtZW50LSZndDt2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFsxXSk7CiYjNDM7CW1lYXN1cmVtZW50LSZndDtjdXJyZW50X3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFszXSk7CiYjNDM7CW1lYXN1cmVtZW50LSZndDt0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtyZXNwLnBheWxvYWRbNV0pOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7cG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cmVzcC5wYXlsb2FkWzddKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtJmd0O29wLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDtlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCQkgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy0mZ3Q7b3AsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwljb25maWctJmd0O21heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTsKJiM0MzsJY29uZmlnLSZndDtwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBwb3J0LCBvcGMtJmd0O29wLCBlbmFibGUgPyAweDEgOiAweDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQU0UgY29udHJvbGxlciBvcHMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIGNvbmZpZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhwc2UsIGlkLCAmYW1wO2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlhZG1pbl9zdGF0ZS0mZ3Q7YzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDoKJiM0MzsJCQkJCQkgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsCiYjNDM7CQkJCQlzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc3RhdHVzLnN0czEpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6CiYjNDM7CQlwd19zdGF0dXMtJmd0O2MzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRElTQUJMRUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOgomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgJmFtcDtzdGF0dXMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhCiYjNDM7CSAqIGZhdWx0L3Rlc3Qgc3RhdGUgKG9yIGEgY29kZSByZXNlcnZlZCBvbiB0aGUgY3VycmVudCBkaWFsZWN0KSBpdAomIzQzOwkgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpcwomIzQzOwkgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlcwomIzQzOwkgKiB2aWEgdGhlIHBvd2VyIHN0YXR1cy4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAoc3RhdHVzLnN0czEpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzoKJiM0MzsJCXJldHVybiBwc2UtJmd0O2RpYWxlY3QtJmd0O3BhcnNlX3BvcnRfY2xhc3MoJmFtcDtzdGF0dXMpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgJmFtcDttZWFzdXJlbWVudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiAxMDBtVyBwZXIgTFNCICovCiYjNDM7CXJldHVybiBtZWFzdXJlbWVudC5wb3dlcl9yYXcgKiAxMDBVOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50OwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MzIgdVY7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCAmYW1wO21lYXN1cmVtZW50KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIDY0LjQ1bVYgcGVyIExTQiAqLwomIzQzOwl1ViA9IG1lYXN1cmVtZW50LnZvbHRhZ2VfcmF3ICogNjQ0NTBVOwomIzQzOwlyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgJmFtcDtjb25maWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvbmZpZy5tYXhfcG93ZXIgKiBwc2UtJmd0O2NoaXAtJmd0O3B3X3JlYWRfbHNiX21XOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCBpbnQgbWF4X21XKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLSZndDtjaGlwOwomIzQzOwl1OCBwcmdfdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAobWF4X21XICZsdDsgMCB8fCBtYXhfbVcgJmd0OyBjaGlwLSZndDttYXhfbVdfcGVyX3BvcnQpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJdHlwZV9vcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07CiYjNDM7CXZhbF9vcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW2NoaXAtJmd0O3B3X3NldF9jbWRdOwomIzQzOwkvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovCiYjNDM7CWlmICghdHlwZV9vcGMtJmd0O3ZhbGlkIHx8ICF2YWxfb3BjLSZndDt2YWxpZCB8fCAhY2hpcC0mZ3Q7cHdfc2V0X2xzYl9tVykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3dpdGNoIHRoZSBwb3J0IHRvIHVzZXItZGVmaW5lZCBsaW1pdCBtb2RlIGZpcnN0LCB0aGVuIHByb2dyYW0gdGhlCiYjNDM7CSAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpbgomIzQzOwkgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0CiYjNDM7CSAqIHN1Y2Nlc3NmdWwgc2V0X3B3X2xpbWl0IGNhbGwgcmVjb3ZlcnMgaXQuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtJmd0O29wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHJnX3ZhbCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X21XIC8gY2hpcC0mZ3Q7cHdfc2V0X2xzYl9tVywgVThfTUFYKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLSZndDtvcCwgcHJnX3ZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJICAgICAgc3RydWN0IHBzZV9wd19saW1pdF9yYW5nZXMgKm91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX3B3X2xpbWl0X3JhbmdlICpyYW5nZTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJhbmdlWzBdLm1pbiA9IDA7CiYjNDM7CXJhbmdlWzBdLm1heCA9IHBzZS0mZ3Q7Y2hpcC0mZ3Q7bWF4X21XX3Blcl9wb3J0OwomIzQzOwomIzQzOwlvdXQtJmd0O2MzM19wd19saW1pdF9yYW5nZXMgPSByYW5nZTsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsICZhbXA7Y29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBjb25maWcucHJpb3JpdHk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsKJiM0MzsJaWYgKHByaW8gJmd0OyBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy0mZ3Q7b3AsIHByaW8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0gewomIzQzOwkucGlfZ2V0X2FkbWluX3N0YXRlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlLAomIzQzOwkucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsCiYjNDM7CS5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsCiYjNDM7CS5waV9nZXRfYWN0dWFsX3B3ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdywKJiM0MzsJLnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSwKJiM0MzsJLnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLAomIzQzOwkucGlfZ2V0X3ZvbHRhZ2UgPSBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSwKJiM0MzsJLnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCwKJiM0MzsJLnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCwKJiM0MzsJLnBpX2dldF9wd19saW1pdF9yYW5nZXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzLAomIzQzOwkucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbywKJiM0MzsJLnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIGV4dF9jb25maWc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgYm9vdGluZyBNQ1UgbWF5IHN0YXkgc2lsZW50ICgtRVRJTUVET1VUKSwgbm90IEFDSyBpdHMgYWRkcmVzcwomIzQzOwkgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGEKJiM0MzsJICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhCiYjNDM7CSAqIGJvdW5kZWQgd2luZG93OyBvdGhlciBlcnJvcnMgKGUuZy4gLUVPUE5PVFNVUFApIGFyZSBmYXRhbCBhbmQgZmFpbAomIzQzOwkgKiBpbW1lZGlhdGVseS4KJiM0MzsJICovCiYjNDM7CWRlYWRsaW5lID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVMpOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBydHBzZV9tY3VfZ2V0X2luZm8ocHNlLCBpbmZvKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVUSU1FRE9VVCAmYW1wOyZhbXA7IHJldCAhPSAtRU5YSU8gJmFtcDsmYW1wOyByZXQgIT0gLUVSRU1PVEVJTyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmV0ICE9IC1FQUdBSU4gJmFtcDsmYW1wOyByZXQgIT0gLUVCQURNU0cgJmFtcDsmYW1wOyByZXQgIT0gLUVCQURFKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJbXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChpbmZvLSZndDtkZXZpY2VfaWQpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM4Yl9pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM5X2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM5Y19pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMToKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7YmNtNTkxMTFfaW5mbzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6CiYjNDM7CQlwc2UtJmd0O2NoaXAgPSAmYW1wO2JjbTU5MTIxX2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRUlOVkFMLCAmIzM0O3Vua25vd24gUFNFIGlkIDB4JXhcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGluZm8tJmd0O2RldmljZV9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDttYXhfcG9ydHMgfHwgaW5mby0mZ3Q7bWF4X3BvcnRzICZndDsgUlRQU0VfTUNVX01BWF9QT1JUUykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgICYjMzQ7TUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XG4mIzM0OywgaW5mby0mZ3Q7bWF4X3BvcnRzKTsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgJmFtcDtleHRfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZGV2X2luZm8ocHNlLSZndDtkZXYsICYjMzQ7JXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXG4mIzM0OywKJiM0MzsJCSBwc2UtJmd0O2RpYWxlY3QtJmd0O21jdV90eXBlX3N0cihpbmZvLSZndDttY3VfdHlwZSksIHBzZS0mZ3Q7Y2hpcC0mZ3Q7bmFtZSwKJiM0MzsJCSBpbmZvLSZndDtkZXZpY2VfaWQsIGluZm8tJmd0O21heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTsKJiM0MzsKJiM0MzsJcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gaW5mbzsKJiM0MzsJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2Q7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtJmd0O2RldiwgJmFtcDtwc2UtJmd0O211dGV4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFtYXRjaCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRU5PREVWLCAmIzM0O21pc3NpbmcgbWF0Y2ggZGF0YVxuJiMzNDspOwomIzQzOwlwc2UtJmd0O2RpYWxlY3QgPSBtYXRjaC0mZ3Q7ZGlhbGVjdDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0CiYjNDM7CSAqIHByb2JlIHRpbWUsIHJhdGhlciB0aGFuIE5VTEwtZGVyZWYmIzM5O2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwc2UtJmd0O2RpYWxlY3QgfHwKJiM0MzsJICAgICFwc2UtJmd0O2RpYWxlY3QtJmd0O3BhcnNlX3N5c3RlbV9pbmZvIHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9wb3J0X2NsYXNzIHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDttY3VfdHlwZV9zdHIpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O2RpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxuJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWxlYXNlIHRoZSBNQ1UgZnJvbSByZXNldCBiZWZvcmUgdGhlIGZpcnN0IHRyYW5zYWN0aW9uOyB0aGUKJiM0MzsJICogYm9vdC1yZXRyeSBsb29wIGluIGRpc2NvdmVyKCkgd2FpdHMgZm9yIGl0IHRvIGFuc3dlci4KJiM0MzsJICovCiYjNDM7CWdwaW9kID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLSZndDtkZXYsICYjMzQ7cmVzZXQmIzM0OywgR1BJT0RfT1VUX0xPVyk7CiYjNDM7CWlmIChJU19FUlIoZ3Bpb2QpKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLSZndDtkZXYsIFBUUl9FUlIoZ3Bpb2QpLAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGdldCByZXNldCBncGlvXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNvbWUgYm9hcmRzIGdhdGUgYWxsIHBvcnRzIHRocm91Z2ggYSBoYXJkd2FyZSBsaW5lOyBkZWFzc2VydCBpdCBzbwomIzQzOwkgKiB0aGUgTUNVIHByb3RvY29sIGdvdmVybnMgcGVyLXBvcnQgYWRtaW4gc3RhdGUgZnJvbSBoZXJlIG9uLgomIzQzOwkgKi8KJiM0MzsJZ3Bpb2QgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtJmd0O2RldiwgJiMzNDtkaXNhYmxlLXBvcnRzJiMzNDssIEdQSU9EX09VVF9MT1cpOwomIzQzOwlpZiAoSVNfRVJSKGdwaW9kKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCBQVFJfRVJSKGdwaW9kKSwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgZGlzYWJsZS1wb3J0cyBncGlvXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsICZhbXA7aW5mbyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkgewomIzQzOwkJcmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTsKJiM0MzsJCS8qIERpYWxlY3RzIHdpdGhvdXQgYSBnbG9iYWwtc3RhdGUgY29uY2VwdCAoZS5nLiBHZW4xKSByZXR1cm4KJiM0MzsJCSAqIC1FT1BOT1RTVVBQOyB0cmVhdCB0aGF0IGFzICYjMzQ7bm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkJiMzNDsuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLSZndDtkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cbiYjMzQ7KTsKJiM0MzsJCWlmICghcmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEZXBlbmRpbmcgb24gdGhlIE1DVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnQKJiM0MzsJICogZm9yIGV2ZXJ5IGJvYXJkKSwgaXQgaXNuJiMzOTt0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yCiYjNDM7CSAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyCiYjNDM7CSAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwkvKiBwY2Rldi5vd25lciBpcyBzZXQgYnkgdGhlIHRyYW5zcG9ydCwgc28gdGhlIHJlZ2lzdGVyZWQgY29udHJvbGxlcgomIzQzOwkgKiBwaW5zIHRoZSB0cmFuc3BvcnQgbW9kdWxlIHRoYXQgb3ducyB0aGUgbGl2ZSBkZXZpY2UsIG5vdCB0aGUgY29yZS4KJiM0MzsJICovCiYjNDM7CXBzZS0mZ3Q7cGNkZXYub3BzICAgICAgPSAmYW1wO3J0cHNlX21jdV9vcHM7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYuZGV2ICAgICAgPSBwc2UtJmd0O2RldjsKJiM0MzsJcHNlLSZndDtwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMzsKJiM0MzsJcHNlLSZndDtwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzOwomIzQzOwlwc2UtJmd0O3BjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTsKJiM0MzsJcHNlLSZndDtwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQzsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocHNlLSZndDtkZXYsICZhbXA7cHNlLSZndDtwY2Rldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O21heF9wb3J0cyA9IHBheWxvYWRbMV07CiYjNDM7CWluZm8tJmd0O3N5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpOwomIzQzOwlpbmZvLSZndDtkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtwYXlsb2FkWzNdKTsKJiM0MzsJaW5mby0mZ3Q7c3dfdmVyID0gcGF5bG9hZFs1XTsKJiM0MzsJaW5mby0mZ3Q7bWN1X3R5cGUgPSBwYXlsb2FkWzZdOwomIzQzOwlpbmZvLSZndDtjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTsKJiM0MzsJaW5mby0mZ3Q7ZXh0X3ZlciA9IHBheWxvYWRbOF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpCiYjNDM7ewomIzQzOwkvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovCiYjNDM7CXJldHVybiBGSUVMRF9HRVQoR0VOTUFTSyg3LCA0KSwgc3RhdHVzLSZndDtzdHMyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKG1jdV90eXBlKSB7CiYjNDM7CWNhc2UgMHgwMDoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjMxMCYjMzQ7OwomIzQzOwljYXNlIDB4MDE6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkYyMzAmIzM0OzsKJiM0MzsJY2FzZSAweDAyOglyZXR1cm4gJiMzNDtHaWdhRGV2aWNlIEdEMzJGMzAzJiMzNDs7CiYjNDM7CWNhc2UgMHgwMzoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjEwMyYjMzQ7OwomIzQzOwljYXNlIDB4MDQ6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkUxMDMmIzM0OzsKJiM0MzsJY2FzZSAweDEwOglyZXR1cm4gJiMzNDtOdXZvdG9uIE0wNTE2JiMzNDs7CiYjNDM7CWNhc2UgMHgxMToJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDU2NCYjMzQ7OwomIzQzOwljYXNlIDB4MTI6CXJldHVybiAmIzM0O051dm90b24gTlVDMDI5JiMzNDs7CiYjNDM7CWRlZmF1bHQ6CXJldHVybiAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJaW5mby0mZ3Q7bWF4X3BvcnRzID0gcGF5bG9hZFsxXTsKJiM0MzsJLyogR2VuMSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlCiYjNDM7CSAqICYjMzQ7cmVtb3RlIGVuYWJsZSYjMzQ7IGJpdCBpbiB0aGUgc3lzdGVtLXN0YXR1cyBmbGFncyBhdCBwYXlsb2FkWzddLgomIzQzOwkgKi8KJiM0MzsJaW5mby0mZ3Q7c3lzdGVtX2VuYWJsZSA9ICEhKHBheWxvYWRbN10gJmFtcDsgQklUKDIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cGF5bG9hZFszXSk7CiYjNDM7CWluZm8tJmd0O3N3X3ZlciA9IHBheWxvYWRbNV07CiYjNDM7CWluZm8tJmd0O21jdV90eXBlID0gcGF5bG9hZFs2XTsKJiM0MzsJaW5mby0mZ3Q7Y29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107CiYjNDM7CWluZm8tJmd0O2V4dF92ZXIgPSBwYXlsb2FkWzhdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKQomIzQzO3sKJiM0MzsJLyogR2VuMSBwdXRzIHRoZSBkZXRlY3RlZCBjbGFzcyBpbiBwYXlsb2FkWzNdICg9PSBzdHMzKSBkaXJlY3RseS4KJiM0MzsJICogTWFzayB0byB0aGUgbG93IG5pYmJsZTsgY2xhc3MgaXMgMC4uOCBhbmQgYW55IGhpZ2ggYml0cyB3b3VsZCBiZQomIzQzOwkgKiBub2lzZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBzdGF0dXMtJmd0O3N0czMgJmFtcDsgMHgwZjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4xX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKG1jdV90eXBlKSB7CiYjNDM7CWNhc2UgMHgwMDoJcmV0dXJuICYjMzQ7U1QgTWljcm8gU1QzMkYxMDAmIzM0OzsKJiM0MzsJY2FzZSAweDAxOglyZXR1cm4gJiMzNDtOdXZvdG9uIE0wNXh4IExBTiYjMzQ7OwomIzQzOwljYXNlIDB4MDI6CXJldHVybiAmIzM0O1NUIE1pY3JvIFNURjAzMEM4JiMzNDs7CiYjNDM7CWNhc2UgMHgwMzoJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDU4U0FOJiMzNDs7CiYjNDM7CWNhc2UgMHgwNDoJcmV0dXJuICYjMzQ7TnV2b3RvbiBOVUMxMjImIzM0OzsKJiM0MzsJZGVmYXVsdDoJcmV0dXJuICYjMzQ7dW5rbm93biYjMzQ7OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIE1hcCBlYWNoIGxvZ2ljYWwgY29tbWFuZCB0aGUgY29yZSBpc3N1ZXMgdG8gaXRzIHBlci1kaWFsZWN0IG9wY29kZS4gKi8KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjIgPSB7CiYjNDM7CS5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvLAomIzQzOwkucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLAomIzQzOwkubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMl9tY3VfdHlwZV9zdHIsCiYjNDM7CS5vcGNvZGUgPSB7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXQk9IFJUUFNFX01DVV9PUCgweDAwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT10JCT0gUlRQU0VfTUNVX09QKDB4NDApLAomIzQzOwkJW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDRhKSwKJiM0MzsKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXQkJPSBSVFBTRV9NQ1VfT1AoMHgwMSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDEyKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXQk9IFJUUFNFX01DVV9PUCgweDEzKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVF0gPSBSVFBTRV9NQ1VfT1AoMHgxNCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV0JPSBSVFBTRV9NQ1VfT1AoMHgxNSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdCQk9IFJUUFNFX01DVV9PUCgweDQyKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXQk9IFJUUFNFX01DVV9PUCgweDQ0KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR10JCT0gUlRQU0VfTUNVX09QKDB4NDgpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR10JPSBSVFBTRV9NQ1VfT1AoMHg0OSksCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjEgPSB7CiYjNDM7CS5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvLAomIzQzOwkucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzLAomIzQzOwkubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIsCiYjNDM7CS5vcGNvZGUgPSB7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dCQk9IFJUUFNFX01DVV9PUCgweDIwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXQkJPSBSVFBTRV9NQ1VfT1AoMHgyYiksCiYjNDM7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV0JCT0gUlRQU0VfTUNVX09QKDB4MDApLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxNSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF0JPSBSVFBTRV9NQ1VfT1AoMHgxNiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV0JPSBSVFBTRV9NQ1VfT1AoMHgxYSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdCQk9IFJUUFNFX01DVV9PUCgweDIxKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXQk9IFJUUFNFX01DVV9PUCgweDMwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR10JCT0gUlRQU0VfTUNVX09QKDB4MjUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR10JPSBSVFBTRV9NQ1VfT1AoMHgyNiksCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjFfZGF0YSA9IHsKJiM0MzsJLmRpYWxlY3QgPSAmYW1wO3J0cHNlX21jdV9kaWFsZWN0X2dlbjEsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMV9kYXRhKTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YSA9IHsKJiM0MzsJLmRpYWxlY3QgPSAmYW1wO3J0cHNlX21jdV9kaWFsZWN0X2dlbjIsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMl9kYXRhKTsKJiM0MzsKJiM0MzsvKiBTYW1lIGRpYWxlY3QgYXMgZ2VuMiwgYnV0IHRoZSBNQ1UgZXhwZWN0cyByYXctSTJDIGZyYW1pbmcuICovCiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhID0gewomIzQzOwkuZGlhbGVjdCA9ICZhbXA7cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiwKJiM0MzsJLm5hdGl2ZV9pMmMgPSB0cnVlLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoY29yZSkmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZTEwZjhjNjMzYjY4ZWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jCkBAIC0wLDAgJiM0MzsxLDE3MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2kyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7cmVhbHRlay1wc2UtbWN1LmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc28KJiM0MzsgKiB0aGUgcmVzcG9uc2UgaXMgbm9ybWFsbHkgcmVhZHkgb24gdGhlIHZlcnkgZmlyc3QgcmVhZC4gRm9yIGNvbW1hbmRzIHRoZQomIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2UKJiM0MzsgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NUwlSVFBTRV9NQ1VfUkVTUE9OU0VfTVMKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTCShSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUykKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJLyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqLwomIzQzOwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLSZndDtvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsCiYjNDM7CQkJCQkgICAgICAodTggKilyZXEgJiM0MzsgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJCQkgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtJmd0O2Rldik7CiYjNDM7CWludCB0cmllcywgcmV0OwomIzQzOwomIzQzOwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgJmx0OyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodHJpZXMgJmd0OyAwKQomIzQzOwkJCW1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTsKJiM0MzsKJiM0MzsJCS8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqLwomIzQzOwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLAomIzQzOwkJCQkJCSAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsCiYjNDM7CQkJCQkJICAgICh1OCAqKXJlc3ApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFICZhbXA7JmFtcDsgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHsKJiM0MzsJLnNlbmQgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQsCiYjNDM7CS5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLSZndDtkZXYpOwomIzQzOwl2b2lkICpidWY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIGkyY19tYXN0ZXJfc2VuZCgpIG1heSBETUEsIHNvIHRoZSBidWZmZXIgbXVzdCBub3QgYmUgb24gdGhlIHN0YWNrLiAqLwomIzQzOwlidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFidWYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiByZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFID8gMCA6IC1FSU87CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS0mZ3Q7ZGV2KTsKJiM0MzsJaW50IHRyaWVzLCByZXQ7CiYjNDM7CXU4ICpidWY7CiYjNDM7CiYjNDM7CS8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqLwomIzQzOwlidWYgPSBrbWFsbG9jKFJUUFNFX01DVV9NU0dfU0laRSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAodHJpZXMgPSAwOyB0cmllcyAmbHQ7IFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcyYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0cmllcyAmZ3Q7IDApCiYjNDM7CQkJbXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpOwomIzQzOwomIzQzOwkJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQlpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSkgewomIzQzOwkJCW1lbWNweShyZXNwLCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7CiYjNDM7CQkJaWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHsKJiM0MzsJCQkJcmV0ID0gMDsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldCA9IC1FVElNRURPVVQ7CiYjNDM7b3V0OgomIzQzOwlrZnJlZShidWYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA9IHsKJiM0MzsJLnNlbmQgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kLAomIzQzOwkucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7Y2xpZW50LSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlOwomIzQzOwlib29sIHVzZV9uYXRpdmU7CiYjNDM7CiYjNDM7CW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CiYjNDM7CWlmICghbWF0Y2gpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsICYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBmcmFtaW5nIChyYXcgSTJDIHZzIFNNQnVzKSBpcyBjYXJyaWVkIGJ5IHRoZSBtYXRjaCBkYXRhLiAqLwomIzQzOwl1c2VfbmF0aXZlID0gbWF0Y2gtJmd0O25hdGl2ZV9pMmM7CiYjNDM7CWlmICh1c2VfbmF0aXZlKSB7CiYjNDM7CQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0mZ3Q7YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLAomIzQzOwkJCQkmIzM0O3BsYWluLUkyQyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgSTJDLWNhcGFibGUgYWRhcHRlclxuJiMzNDspOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtJmd0O2FkYXB0ZXIsCiYjNDM7CQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8CiYjNDM7CQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLAomIzQzOwkJCQkmIzM0O1NNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBzZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHNlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBzZS0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwlwc2UtJmd0O3BjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CiYjNDM7CXBzZS0mZ3Q7dHJhbnNwb3J0ID0gdXNlX25hdGl2ZSA/ICZhbXA7cnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzIDogJmFtcDtydHBzZV9tY3VfaTJjX3NtYnVzX29wczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9yZWdpc3Rlcihwc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfaTJjX29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzJiMzNDssIC5kYXRhID0gJmFtcDtydHBzZV9tY3VfZ2VuMV9kYXRhIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzJiMzNDssIC5kYXRhID0gJmFtcDtydHBzZV9tY3VfZ2VuMl9kYXRhIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyYyYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfaTJjX29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRwc2VfbWN1X2kyY19kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZQkJPSAmIzM0O3JlYWx0ZWstcHNlLW1jdS1pMmMmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZQk9IHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7CS5wcm9iZQkJPSBydHBzZV9tY3VfaTJjX3Byb2JlLAomIzQzO307CiYjNDM7bW9kdWxlX2kyY19kcml2ZXIocnRwc2VfbWN1X2kyY19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydCkmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YmFhMTdkOGQzMWZhMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jCkBAIC0wLDAgJiM0MzsxLDE2NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZXJkZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtyZWFsdGVrLXBzZS1tY3UuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQJMTkyMDAKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQJbXNlY3NfdG9famlmZmllcygxMDApCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUykKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlOwomIzQzOwlzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2OwomIzQzOwlzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lOwomIzQzOwlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0cyByeF9idWYgYW5kIHJ4X2xlbiAqLwomIzQzOwlzaXplX3QgcnhfbGVuOwomIzQzOwl1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlbgomIzQzOyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50CiYjNDM7ICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZAomIzQzOyAqIGludG8gdGhlIG5leHQgZnJhbWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsCiYjNDM7CQkJCSAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7CiYjNDM7CXNpemVfdCB0YWtlOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCXRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtJmd0O3J4X2J1ZikgLSBjdHgtJmd0O3J4X2xlbik7CiYjNDM7CQlpZiAodGFrZSkgewomIzQzOwkJCW1lbWNweShjdHgtJmd0O3J4X2J1ZiAmIzQzOyBjdHgtJmd0O3J4X2xlbiwgYnVmLCB0YWtlKTsKJiM0MzsJCQljdHgtJmd0O3J4X2xlbiAmIzQzOz0gdGFrZTsKJiM0MzsJCQlpZiAoY3R4LSZndDtyeF9sZW4gPT0gc2l6ZW9mKGN0eC0mZ3Q7cnhfYnVmKSkKJiM0MzsJCQkJY29tcGxldGUoJmFtcDtjdHgtJmd0O3J4X2RvbmUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGNvbnN1bWUgYWxsIHRvIGF2b2lkIGRlc3luYy9taXNhbGlnbm1lbnQgKi8KJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmRldl9kZXZpY2Vfb3BzIHJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMgPSB7CiYjNDM7CS5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsCiYjNDM7CS53cml0ZV93YWtldXAgPSBzZXJkZXZfZGV2aWNlX3dyaXRlX3dha2V1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTsKJiM0MzsJaW50IHdyaXR0ZW47CiYjNDM7CiYjNDM7CS8qIGNsZWFyIGFueSBsZWZ0b3ZlciByeCBzdGF0ZSBiZWZvcmUgdHJhbnNtaXR0aW5nICovCiYjNDM7CXNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCAmYW1wO2N0eC0mZ3Q7cnhfbG9jaykgewomIzQzOwkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtjdHgtJmd0O3J4X2RvbmUpOwomIzQzOwkJY3R4LSZndDtyeF9sZW4gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdyaXR0ZW4gPSBzZXJkZXZfZGV2aWNlX3dyaXRlKGN0eC0mZ3Q7c2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSwKJiM0MzsJCQkJICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7CiYjNDM7CWlmICh3cml0dGVuICZsdDsgMCkKJiM0MzsJCXJldHVybiB3cml0dGVuOwomIzQzOwlpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7CiYjNDM7CiYjNDM7CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7Y3R4LSZndDtyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSkKJiM0MzsJCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCWlmIChjdHgtJmd0O3J4X2xlbiAhPSBzaXplb2YoKnJlc3ApKQomIzQzOwkJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwkJbWVtY3B5KHJlc3AsIGN0eC0mZ3Q7cnhfYnVmLCBzaXplb2YoKnJlc3ApKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzID0gewomIzQzOwkuc2VuZCA9IHJ0cHNlX21jdV91YXJ0X3NlbmQsCiYjNDM7CS5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdiwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldikKJiM0Mzt7CiYjNDM7CXUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtzZXJkZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHg7CiYjNDM7CXVuc2lnbmVkIGludCBiYXVkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljdHgtJmd0O3NlcmRldiA9IHNlcmRldjsKJiM0MzsJY3R4LSZndDtwc2UuZGV2ID0gZGV2OwomIzQzOwljdHgtJmd0O3BzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwljdHgtJmd0O3BzZS50cmFuc3BvcnQgPSAmYW1wO3J0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHM7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO2N0eC0mZ3Q7cnhfZG9uZSk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7Y3R4LSZndDtyeF9sb2NrKTsKJiM0MzsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7CiYjNDM7CXNlcmRldl9kZXZpY2Vfc2V0X2NsaWVudF9vcHMoc2VyZGV2LCAmYW1wO3J0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtmYWlsZWQgdG8gb3BlbiBzZXJkZXZcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgJiMzNDtjdXJyZW50LXNwZWVkJiMzNDssICZhbXA7c3BlZWQpOwomIzQzOwomIzQzOwliYXVkID0gc2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7CiYjNDM7CWlmIChiYXVkICE9IHNwZWVkKQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O2NvdWxkIG5vdCBzZXQgYmF1ZHJhdGUgJXUsIGNvbnRyb2xsZXIgdXNlcyAldVxuJiMzNDssCiYjNDM7CQkJIHNwZWVkLCBiYXVkKTsKJiM0MzsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpOwomIzQzOwomIzQzOwlyZXQgPSBzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O2NvdWxkIG5vdCBzZXQgcGFyaXR5IHRvIG5vbmU6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcigmYW1wO2N0eC0mZ3Q7cHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjEmIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9nZW4xX2RhdGEgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjImIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9nZW4yX2RhdGEgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7cmVhbHRlay1wc2UtbWN1LXVhcnQmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IHJ0cHNlX21jdV91YXJ0X29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUgID0gcnRwc2VfbWN1X3VhcnRfcHJvYmUsCiYjNDM7fTsKJiM0Mzttb2R1bGVfc2VyZGV2X2RldmljZV9kcml2ZXIocnRwc2VfbWN1X3VhcnRfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Sm9uYXMgSmVsb25layAmbHQ7amVsb25lay5qb25hc0BnbWFpbC5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KSYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMGEzMTk3YzljOWNkMWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmgKQEAgLTAsMCAmIzQzOzEsODkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1JFQUxURUtfUFNFX01DVV9ICiYjNDM7I2RlZmluZSBfUkVBTFRFS19QU0VfTUNVX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGltZSB0aGUgTUNVIGl0c2VsZiBuZWVkcyBiZXR3ZWVuIGFjY2VwdGluZyBhIHJlcXVlc3QgYW5kIGhhdmluZyBhCiYjNDM7ICogcmVzcG9uc2UgcmVhZHkuIFRoZXNlIGFyZSBwcm9wZXJ0aWVzIG9mIHRoZSBNQ1UgZmlybXdhcmUsIG5vdCBvZiB0aGUKJiM0MzsgKiB1bmRlcmx5aW5nIHRyYW5zcG9ydDogdGhlIGNvcmUgcGFjZXMgdHJhbnNhY3Rpb25zIGJ5IFJUUFNFX01DVV9SRVNQT05TRV9NUwomIzQzOyAqIGFuZCBib3RoIHRyYW5zcG9ydHMgc2l6ZSB0aGVpciBwZXItdHJhbnNhY3Rpb24gcmVjdiBjZWlsaW5nIGZyb20KJiM0MzsgKiBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TLCBzaW5jZSBzb21lIGNvbW1hbmRzIGFyZSBkb2N1bWVudGVkIGFzCiYjNDM7ICogbmVlZGluZyB1cCB0byB+MXMgdG8gcHJvZHVjZSBhIHJlcGx5LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01TCQkJMjUKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMJCTEwMDAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2UKJiM0MzsgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90CiYjNDM7ICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmUKJiM0MzsgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVMJCTMwMDAKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9CT09UX1JFVFJZX01TCQkJMTAwCiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTVNHX1NJWkUJCQkxMgomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfbXNnIHsKJiM0MzsJdTggb3Bjb2RlOwomIzQzOwl1OCBzZXFfbnVtOwomIzQzOwl1OCBwYXlsb2FkWzldOwomIzQzOwl1OCBjaGVja3N1bTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qCiYjNDM7ICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IEdlbjIgbmV2ZXIgZW1pdHMgdGhlbSkuCiYjNDM7ICogSU5DT01QTEVURS9CQURfQ1NVTSBhcmUgdGVybWluYWw7IE5PVF9SRUFEWSBpcyB0cmFuc2llbnQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUJCTB4ZmQJLyogLUVCQURFICAgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU0JCTB4ZmUJLyogLUVCQURNU0cgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZCQkweGZmCS8qIC1FQUdBSU4gICovCiYjNDM7CiYjNDM7LyogQSBwb2xsaW5nIHRyYW5zcG9ydCBjYW4gc3RvcCBoZXJlOiB0aGUgbWF0Y2hpbmcgcmVwbHksIG9yIGEgdGVybWluYWwgZXJyb3IuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJCQkgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZXNwLSZndDtvcGNvZGUgPT0gcmVxLSZndDtvcGNvZGUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovCiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0OwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybDsKJiM0MzsKJiM0MzsvKiBQZXItY29tcGF0aWJsZSBtYXRjaCBkYXRhICh0aGUgb2ZfbWF0Y2ggLmRhdGEpLiAqLwomIzQzO3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDsKJiM0MzsJYm9vbCBuYXRpdmVfaTJjOwkvKiByYXctSTJDIGZyYW1pbmcgKHZzIFNNQnVzKTsgSTJDIHRyYW5zcG9ydCBvbmx5ICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgewomIzQzOwlpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7CiYjNDM7CWludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybCB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjsKJiM0MzsJc3RydWN0IG11dGV4IG11dGV4OyAvKiBzZXJpYWxpemVzIE1DVSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zYWN0aW9ucyAqLwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgKnRyYW5zcG9ydDsKJiM0MzsJdTggc2VxOwkJCS8qIHJvbGxpbmcgcmVxdWVzdCBzZXFfbnVtLCBlY2hvZWQgYnkgdGhlIE1DVSAqLwomIzQzO307CiYjNDM7CiYjNDM7aW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7CiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhOwomIzQzOwomIzQzOyNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAxNAoJCQkJCQkJb3V0cHV0OiAzODQKCQkJCQkJCXRob3VnaHRzOiAzMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFJlYWx0ZWsgUFNFIE1DVSBEcml2ZXIqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSwgaGFuZGxpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSByZWFjaCBpdCBpbiBRRU1VPyBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIEkyQyBhbmQgVUFSVCwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIG9yIGluc3RhbnRpYXRlZCBpbiBhIGZldyB3YXlzLiBJMkMsIGZvciBpbnN0YW5jZSwgaGFzIGBpMmMtc3R1YmAsIGBpMmMtZGV2YCwgb3IgZGV2aWNlIHRyZWUgbm9kZXMgZm9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiwgb3Igc3l6a2FsbGVyIGl0c2VsZiBjYW4gaW5qZWN0IHRyYWZmaWMgb3IgY3JlYXRlIHZpcnR1YWwgZGV2aWNlcy4gU3l6a2FsbGVyLCByaWdodC4uLiBpdCBtaWdodCB1c2UgYC9kZXYvaTJjLVhgLCBidXQgdGhpcyBpcyBhICpzcGVjaWZpYyoga2VybmVsIGRyaXZlci4gU28sIGNhbiB3ZSBwcm9iZSB0aGlzIGRyaXZlcj8KClRoZSBhbnN3ZXIgaXMgeWVzLiBEZXZpY2UgdHJlZSBub2RlcyBvciBJMkMgc3lzZnMgYG5ld19kZXZpY2VgIHNob3VsZCBkbyB0aGUgdHJpY2suIFVBUlQsIGJlaW5nIHNlcmRldiwgYWxzbyByZWxpZXMgb24gZGV2aWNlIHRyZWUsIHRob3VnaCBgbGRhdHRhY2hgIGlzIHRlbXB0aW5nLCBpdCBpcyBub3QgdGhlIHVzdWFsIGNhc2UuIFN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIG92ZXJsYXlzLCBhbmQgaXQgaGFzIGJ1aWx0LWluIHdheXMgdG8gdGVzdCBzZXJkZXYgYW5kIEkyQyBkcml2ZXJzIGlmIGluc3RhbnRpYXRlZC4gU28sIGNhbiB3ZSBmdXp6IHRoaXMgdGhpbmc/IEFic29sdXRlbHkuCgpUaGUgZHJpdmVyIGltcGxlbWVudHMgYHBzZV9jb250cm9sbGVyX29wc2AsIHNvIGlmIGl0JiMzOTtzIHByb2JlZCwgd2UmIzM5O3JlIHRhbGtpbmcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzIHRvIHJlYWNoIHRob3NlIGZ1bmN0aW9ucy4gQ3J1Y2lhbGx5LCBJMkMgZGV2aWNlcyBjYW4gYmUgaW5zdGFudGlhdGVkIGJ5IHdyaXRpbmcgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy1YL25ld19kZXZpY2VgLiAqVGhhdCYjMzk7cyogdGhlIGtleS4gSSBzZWUgYW4gYG9mX21hdGNoX3RhYmxlYCwgbm90IGFuIGBpZF90YWJsZWAuIERvZXMgYG5ld19kZXZpY2VgIHdvcmsgd2l0aCBhbiBgb2ZfbWF0Y2hfdGFibGVgPyBOb3JtYWxseSBpdCB3YW50cyBhbiBgaWRfdGFibGVgIG9yIGBkcml2ZXIubmFtZWAuIFdhaXQuLi4gSTJDIGNvcmUgZmFsbHMgYmFjayB0byBgb2ZfbWF0Y2hfdGFibGVgIGlmIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgY29tcGF0aWJsZSBzdHJpbmcgKndpdGhvdXQqIHRoZSB2ZW5kb3IgcHJlZml4LCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBTeXprYWxsZXIgY2FuIGxvYWQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgYW55d2F5LgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGZvciBvdXIgZnV6emluZyBlZmZvcnRzPyBXZSBuZWVkIHRvIHBpbnBvaW50IHRoZSBlbnRyeSBwb2ludHMuIFRoZSBkcml2ZXIgZXhwb3NlcyB0aGVzZSBmdW5jdGlvbnM6IGBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NgLCBhbmQgc28gb24uIEFsbCB0aGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBldGh0b29sIG5ldGxpbmsgaWYgdGhlIGRldmljZSBpcyBwcm9iZWQuIEFuZCBvZiBjb3Vyc2UsIHRoZSBJMkMgYW5kIFVBUlQgcmVjZWl2ZSBwYXRoczogYHJ0cHNlX21jdV91YXJ0X3JlY2VpdmVgLCBgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2YCwgYHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3ZgLiBJbXBvcnRhbnRseSwgYHJ0cHNlX21jdV91YXJ0X3JlY2VpdmVgIGlzIGNhbGxlZCB3aGVuIGRhdGEgY29tZXMgaW4gb3ZlciBVQVJULiBJbnN0YW50aWF0ZSB0aGUgc2VyZGV2IGRldmljZSBhbmQgd2UgY2FuIGZlZWQgaXQgZGF0YSwgZS5nLiwgdmlhIGEgcHR5LiBFeGNlbGxlbnQuIFRpbWUgdG8gZnV6ei4KClRoaXMgaXMgYSBuZXcgZHJpdmVyLCBpdCBwYXJzZXMgZGF0YSBmcm9tIHRoZSBkZXZpY2UsIGFuZCBleHBvc2VzIG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlIOKAkyBwcmltZSBmdXp6aW5nIG1hdGVyaWFsLgoKVG8gZW5hYmxlIHRoaXMsIHdlIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgLCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVWAsIGBDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQ2AsIGFuZCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUYC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gWWVwLCB0aGF0IGxvb2tzIHJpZ2h0OyBgUFNFX0NPTlRST0xMRVJgIGFuZCBgU0VSSUFMX0RFVl9CVVNgIG5lZWQgdG8gYmUgZW5hYmxlZCBhbmQgYEkyQ2AuCgpPa2F5LCBsZXQmIzM5O3MgbGlzdCB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6CgoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZWAKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2AKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3YAoqICAgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWAKKiAgIGBydHBzZV9tY3VfcG9ydF9kaXNhYmxlYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdGAKKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc2AKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHJpb2AKKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHJpb2AKKiAgIGBydHBzZV9tY3VfdWFydF9yZWNlaXZlYAoqICAgYHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdmAKKiAgIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YAoqICAgYHJ0cHNlX21jdV9kaXNjb3ZlcgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OywKICAgICYjMzQ7U0VSSUFMX0RFVl9CVVMmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCBzdXBwb3J0aW5nIGJvdGggSTJDIGFuZCBVQVJUIHRyYW5zcG9ydHMuIFRoZSBkcml2ZXIgZXhwb3NlcyBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBuZXRsaW5rIGFuZCBwYXJzZXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2Ugb3ZlciBJMkMvVUFSVC4gSXQgY2FuIGJlIHByb2JlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3IgSTJDIHN5c2ZzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX0kyQyYjMzQ7LAogICAgJiMzNDtQU0VfUkVBTFRFS19NQ1VfVUFSVCYjMzQ7LAogICAgJiMzNDtTRVJJQUxfREVWX0JVUyYjMzQ7LAogICAgJiMzNDtJMkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHN1cHBvcnRpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gVGhlIGRyaXZlciBleHBvc2VzIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlIHZpYSBldGh0b29sIG5ldGxpbmsgYW5kIHBhcnNlcyBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBvdmVyIEkyQy9VQVJULiBJdCBjYW4gYmUgcHJvYmVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBJMkMgc3lzZnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMDE6MTU6MTcuNTY1MTcyMDMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MDM3OTk5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9JMkNcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9VQVJUXCIsXG4gICAgXCJTRVJJQUxfREVWX0JVU1wiLFxuICAgIFwiSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRwc2VfbWN1X3JlZ2lzdGVyXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9lbmFibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2Rpc2FibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHN1cHBvcnRpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gVGhlIGRyaXZlciBleHBvc2VzIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlIHZpYSBldGh0b29sIG5ldGxpbmsgYW5kIHBhcnNlcyBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBvdmVyIEkyQy9VQVJULiBJdCBjYW4gYmUgcHJvYmVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBJMkMgc3lzZnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMToxNToxNy41NjUxNzk2NjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTMyNDMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI4NmMyMTY2MjA1OWRhNDgxZTcxOWFiOWFkYWVhZTg3N2EwNjgxZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDE6MTU6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wZjFhODE5ZGI0OWJiY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sXFxuQEAgLTAsMCArMSwxODAgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFJlYWx0ZWsgUFNFIE1DVVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKb25hcyBKZWxvbmVrIFxcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudClcXG4rICBoYXJkd2FyZSBvbiBhIHJhbmdlIG9mIG1hbmFnZWQgUG9FIHN3aXRjaGVzLiBUaGUgaG9zdCBDUFUgdGFsa3Mgb25seSB0b1xcbisgIHRoaXMgTUNVIC0gb3ZlciBJMkMvU01CdXMgb3IgVUFSVCAtIHVzaW5nIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDtcXG4rICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkXFxuKyAgZGlyZWN0bHkuIEZvciBleGFtcGxlLCBvbiB0aGUgWnl4ZWwgR1MxOTAwLTEwSFAgdGhlIFNvQyByZWFjaGVzIHRoZSBNQ1VcXG4rICBvdmVyIFVBUlQsIGFuZCB0aGUgTUNVIG1hbmFnZXMgdGhlIG9uLWJvYXJkIFBTRSBjaGlwLlxcbitcXG4rICBUaGlzIGJpbmRpbmcgZGVzY3JpYmVzIHRoZSBNQ1UgdG9nZXRoZXIgd2l0aCBpdHMgUmVhbHRlayBmaXJtd2FyZTogdGhlXFxuKyAgZmlybXdhcmUgYW5kIGl0cyBob3N0IHByb3RvY29sLCB3aGljaCBhcmUgc3RhYmxlIGFjcm9zcyBib2FyZHMuIFRoZVxcbisgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGVcXG4rICBQU0Ugc2lsaWNvbiBiZWhpbmQgdGhlIE1DVSAoUmVhbHRlayBSVEw4MjN4L1JUTDgyMzkqIG9yIEJyb2FkY29tXFxuKyAgQkNNNTl4eHgpIGlzIHJlcG9ydGVkIGJ5IHRoZSBNQ1UgYW5kIGRldGVjdGVkIGF0IHJ1bnRpbWUgLSBuZWl0aGVyIGlzXFxuKyAgbmFtZWQgaGVyZS5cXG4rXFxuKyAgVHdvIHByb3RvY29sIGdlbmVyYXRpb25zIGV4aXN0LCBib3RoIFJlYWx0ZWsnczpcXG4rICAgIGdlbjEgIG9sZGVyIGJvYXJkcywgd2hlcmUgdGhlIE1DVSBmcm9udHMgQnJvYWRjb20gUFNFIHNpbGljb25cXG4rICAgIGdlbjIgIHRoZSBhbHRlcmVkIHByb3RvY29sIHVzZWQgd2l0aCBSZWFsdGVrJ3Mgb3duIFBTRSBzaWxpY29uXFxuK1xcbisgIE9uIGFuIEkyQyBhdHRhY2htZW50IHRoZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBpcyBwYXJ0IG9mIHRoZVxcbisgIGNvbXBhdGlibGU6ICctc21idXMnIChyZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlIGFuZCBhIHJlcGVhdGVkXFxuKyAgc3RhcnQpIG9yICctaTJjJyAoYmFyZSBibG9jayB3cml0ZXMgYW5kIHJlYWRzKS4gQSBVQVJUIGF0dGFjaG1lbnQgY2Fycmllc1xcbisgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJ3NlcmlhbCcgbm9kZS5cXG4rXFxuKyAgRWFjaCBib2FyZCBhZGRpdGlvbmFsbHkgY2FycmllcyBhIGRldmljZS1zcGVjaWZpYyBjb21wYXRpYmxlIHRoYXQgZmFsbHNcXG4rICBiYWNrIHRvIG9uZSBvZiB0aGUgcHJvdG9jb2wgY29tcGF0aWJsZXMgYWJvdmUuIERyaXZlcnMgYmluZCBvbiB0aGVcXG4rICBwcm90b2NvbCBjb21wYXRpYmxlOyB0aGUgZGV2aWNlLXNwZWNpZmljIHN0cmluZyBpZGVudGlmaWVzIHRoZSBib2FyZCBhbmRcXG4rICByZXNlcnZlcyBhIHBsYWNlIGZvciBhIGZ1dHVyZSBwZXItYm9hcmQgcXVpcmsgd2l0aG91dCBoYXZpbmcgdG8gcmV0cm9maXRcXG4rICBkZXZpY2UgdHJlZXMgYWxyZWFkeSBpbiB0aGUgZmllbGQuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBvbmVPZjpcXG4rICAgICAgIyBVQVJUXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xXFxuK1xcbisgICAgICAjIEkyQywgU01CdXMgZnJhbWluZ1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTIwLTI0aHAtdjItcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1xcbitcXG4rICAgICAgIyBVQVJUXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1iMS1wc2VcXG4rICAgICAgICAgICAgICAtIHp5eGVsLHhtZzE5MTUtMTBlcC1wc2VcXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4yXFxuK1xcbisgICAgICAjIEkyQywgU01CdXMgZnJhbWluZ1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0genl4ZWwseHMxOTMwLTEyaHAtcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xcbitcXG4rICAgICAgIyBJMkMsIHJhdyBmcmFtaW5nXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSBsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1xcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICByZXNldC1ncGlvczpcXG4rICAgIGRlc2NyaXB0aW9uOiBSZXNldCBsaW5lIG9mIHRoZSBNQ1UuXFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBkaXNhYmxlLXBvcnRzLWdwaW9zOlxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEhhcmR3YXJlIGdhdGUgdGhhdCBmb3JjZXMgYWxsIHBvcnRzIGludG8gYWRtaW4tZGlzYWJsZWQgc3RhdGUgd2hpbGVcXG4rICAgICAgYXNzZXJ0ZWQuXFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rICAjIEEgJy1zbWJ1cycvJy1pMmMnIGNvbXBhdGlibGUgaXMgYW4gSTJDIGF0dGFjaG1lbnQ6IGl0IGhhcyAncmVnJyBhbmRcXG4rICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlRcXG4rICAjIGF0dGFjaG1lbnQ6IG5vICdyZWcnLCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXFxuKyAgICB0aGVuOlxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIHJlZ1xcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXFxuKyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxcbisgICAgZWxzZTpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6IGZhbHNlXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudFxcbisgIC0gfFxcbisgICAgaTJjIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ6eXhlbCx4czE5MzAtMTJocC1wc2VcXFwiLCBcXFwicmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XFxuKyAgLSB8XFxuKyAgICBpMmMge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZVxcXCIsIFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBVQVJUIGF0dGFjaG1lbnRcXG4rICAtIHxcXG4rICAgIHNlcmlhbCB7XFxuKyAgICAgICAgZXRoZXJuZXQtcHNlIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcXFwiLCBcXFwicmVhbHRlayxwc2UtbWN1LWdlbjFcXFwiO1xcbisgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gXFx1MDAzYzE5MjAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIHBzZS1waXMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNjBjZmYwMDk1M2RjYmUuLjE2MTM2YWMxMWUwNjM3IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjI3MzYsNiArMjI3MzYsMTMgQEAgUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0aW5jbHVkZS9zb3VuZC9ydCouaFxcbiBGOlxcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXFxuIFxcbitSRUFMVEVLIFBTRSBNQ1UgRFJJVkVSXFxuK006XFx0Sm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sXFxuK0Y6XFx0ZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdSpcXG4rXFxuIFJFQUxURUsgT1RUTyBXQVRDSERPR1xcbiBNOlxcdFNhbmRlciBWYW5oZXVsZSBcXHUwMDNjc2FuZGVyQHN2YW5oZXVsZS5uZXRcXHUwMDNlXFxuIEw6XFx0bGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcXG5pbmRleCA3ZWYyOTY1N2VlNWRkMS4uYTBmMmFlNjY4YzY3YzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xcbkBAIC0xMyw2ICsxMywzNCBAQCBtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXFxuIFxcbiBpZiBQU0VfQ09OVFJPTExFUlxcbiBcXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVVxcbitcXHR0cmlzdGF0ZVxcbitcXHRoZWxwXFxuK1xcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzIHNlbGVjdGVkXFxuK1xcdCAgYXV0b21hdGljYWxseSBieSB0aGUgdHJhbnNwb3J0IG9wdGlvbnMgYmVsb3cuXFxuK1xcbitjb25maWcgUFNFX1JFQUxURUtfTUNVX0kyQ1xcbitcXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcXFwiXFxuK1xcdGRlcGVuZHMgb24gSTJDXFxuK1xcdHNlbGVjdCBQU0VfUkVBTFRFS19NQ1VcXG4rXFx0aGVscFxcbitcXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXFxuK1xcdCAgaGFyZHdhcmUgb24gdmFyaW91cyBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMsIGF0dGFjaGVkXFxuK1xcdCAgdmlhIEkyQy9TTUJ1cy4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbFxcbitcXHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXFxuK1xcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuXFxuK1xcbitjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlRcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xcbitcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuK1xcdGhlbHBcXG4rXFx0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxcbitcXHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxcbitcXHQgIHZpYSBVQVJULiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsIFBTRVxcbitcXHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcXG4rXFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmVhbHRlay1wc2UtbWN1LXVhcnQuXFxuK1xcbiBjb25maWcgUFNFX1JFR1VMQVRPUlxcbiBcXHR0cmlzdGF0ZSBcXFwiUmVndWxhdG9yIGJhc2VkIFBTRSBjb250cm9sbGVyXFxcIlxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxcbmluZGV4IGNjNzhmN2VhN2Y1ZjcxLi45Y2NhNTkwMGZlMzQyMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcXG5AQCAtMyw2ICszLDkgQEBcXG4gXFxuIG9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgKz0gcHNlX2NvcmUub1xcbiBcXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVSkgKz0gcmVhbHRlay1wc2UtbWN1LWNvcmUub1xcbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQykgKz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXFxuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVCkgKz0gcmVhbHRlay1wc2UtbWN1LXVhcnQub1xcbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgKz0gcHNlX3JlZ3VsYXRvci5vXFxuIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgKz0gcGQ2OTJ4MC5vXFxuIG9iai0kKENPTkZJR19QU0VfU0kzNDc0KSArPSBzaTM0NzQub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODIwNGNiNDMwZmZlYThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmNcXG5AQCAtMCwwICsxLDk4OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUFNFIHNpbGljb24gb24gdmFyaW91c1xcbisgKiBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMuIFRoZSBNQ1Ugc3BlYWtzIGEgMTItYnl0ZSBmaXhlZC1mcmFtZVxcbisgKiBtYW5hZ2VtZW50IHByb3RvY29sOyB0aGlzIGRyaXZlciBjb3ZlcnMgdHdvIGdlbmVyYXRpb25zIG9mIHRoZVxcbisgKiBwcm90b2NvbCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGUgdGFibGUgYW5kIHJlc3BvbnNlIHBhcnNlcnMuXFxuKyAqXFxuKyAqIE1hbnkgUG9FIHN3aXRjaCBkZXNpZ25zIHB1dCBhIGRlZGljYXRlZCBtaWNyb2NvbnRyb2xsZXIgaW4gZnJvbnQgb2YgdGhlXFxuKyAqIGFjdHVhbCBQU0Ugc2lsaWNvbjogdGhlIGhvc3QgQ1BVIHRhbGtzIHRvIHRoZSBNQ1Ugb3ZlciBJMkMvU01CdXMgb3JcXG4rICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVXFxuKyAqIHNwZWFrcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wuIFRoZSBQU0UgY2hpcHMgdGhlbXNlbHZlcyBhcmUgbm90XFxuKyAqIGFjY2Vzc2VkIGRpcmVjdGx5OyBldmVyeXRoaW5nIGdvZXMgdGhyb3VnaCBNQ1UgY29tbWFuZHMuXFxuKyAqXFxuKyAqIFRoaXMgZHJpdmVyIHRhcmdldHMgdGhhdCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBSZWFsdGVrLWZhbWlseSBwcm90b2NvbC5cXG4rICogVHdvIGdlbmVyYXRpb25zIGFyZSBzdXBwb3J0ZWQ6IEdlbjEgYmVpbmcgdXNlZCBvbiBvbGRlciBzd2l0Y2hlcyB3aGVyZVxcbisgKiB0aGUgTUNVIGZyb250cyBhbmQgbWFuYWdlcyBCcm9hZGNvbSBQU0Ugc2lsaWNvbjsgR2VuMiBiZWluZyB1c2VkIHdpdGhcXG4rICogUmVhbHRlayBQU0Ugc2lsaWNvbi4gVGhlIHR3byBzaGFyZSBmcmFtZSBmb3JtYXQgYW5kIGEgc3VtLW1vZC0yNTZcXG4rICogY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnMgYW5kIG9uIGEgZmV3IHJlc3BvbnNlIGxheW91dHM7XFxuKyAqIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuXFxuKyAqXFxuKyAqIE91dCBvZiBzY29wZTogUFNFIGNoaXBzIHRoYXQgYXJlIGludGVyZmFjZWQgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdFxcbisgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sXFxuKyAqIGZhbWlseSwgYW5kIFxcXCJkdW1iIFBTRVxcXCIgbW9kZXMgd2hlcmUgbm8gaG9zdCBjb250cm9sIGlzIHdpcmVkIHVwIGF0IGFsbC5cXG4rICpcXG4rICogVGhpcyBjb3JlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCwgZGVjb2RpbmcvZW5jb2Rpbmcgb2YgTUNVXFxuKyAqIHJlc3BvbnNlcywgYW5kIHRoZSBwc2VfY29udHJvbGxlcl9vcHMgaW50ZWdyYXRpb24uIFRyYW5zcG9ydCBtb2R1bGVzXFxuKyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2XFxuKyAqIGNhbGxiYWNrcy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pbm1heC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwicmVhbHRlay1wc2UtbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcXHRcXHQweDAxMzhcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcXHRcXHQweDAwMzlcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDXFx0XFx0MHgwMTM5XFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVxcdFxcdDB4ZTExMVxcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcXHRcXHQweGUxMjFcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEXFx0XFx0MHgwMFxcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkdcXHRcXHQweDAxXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcXHRcXHQweDAyXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1RcXHRcXHRcXHQweDAzXFx0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUXFx0XFx0MHgwNFxcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVFxcdFxcdDB4MDVcXHQvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1xcdFxcdDB4MDZcXG4rXFxuKy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUU1xcdFxcdFxcdDQ4XFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXFx0XFx0M1xcbitcXG4rZW51bSBydHBzZV9tY3VfY21kIHtcXG4rXFx0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxcbitcXHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcXG4rXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9FTkFCTEUsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxcbitcXG4rXFx0UlRQU0VfTUNVX05VTV9DTURTLFxcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUge1xcbitcXHR1OCBvcDtcXG4rXFx0Ym9vbCB2YWxpZDtcXG4rfTtcXG4rXFxuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcXHR7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH1cXG4rXFxuKy8qIFBhcnNlZCBNQ1UgcmVzcG9uc2Ugc3RydWN0dXJlcyAoZGVjb2RlZCBmcm9tIHJ0cHNlX21jdV9tc2cgcmVwbGllcykgKi9cXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XFxuK1xcdHU4IG1heF9wb3J0cztcXG4rXFx0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1OCBzd192ZXI7XFxuK1xcdHU4IG1jdV90eXBlO1xcbitcXHR1OCBjb25maWdfc3RhdHVzO1xcbitcXHR1OCBleHRfdmVyO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcXG4rXFx0dTggdXZsbztcXG4rXFx0dTggb3ZsbztcXG4rXFx0Ym9vbCBwcmVhbGxvY19lbmFibGU7XFxuK1xcdHU4IG51bV9vZl9wc2VzO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XFxuK1xcdHU4IHN0czE7XFxuK1xcdHU4IHN0czI7XFxuK1xcdHU4IHN0czM7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xcbitcXHR1MTYgdm9sdGFnZV9yYXc7XFx0LyogNjQuNDVtVi9MU0IgKi9cXG4rXFx0dTE2IGN1cnJlbnRfcmF3O1xcdC8qIDFtQS9MU0IgKi9cXG4rXFx0dTE2IHRlbXBlcmF0dXJlX3JhdztcXHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xcbitcXHR1MTYgcG93ZXJfcmF3O1xcdFxcdC8qIDEwMG1XL0xTQiAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XFxuK1xcdGJvb2wgZW5hYmxlO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcge1xcbitcXHR1OCBtYXhfcG93ZXI7XFxuK1xcdHU4IHByaW9yaXR5O1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgb3Bjb2RlW1JUUFNFX01DVV9OVU1fQ01EU107XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcXG4rXFx0ICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlXFxuK1xcdCAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssXFxuK1xcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7XFxuK1xcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XFxuK1xcdGNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8ge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1MzIgbWF4X21XX3Blcl9wb3J0O1xcbitcXHRlbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDtcXHQvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovXFxuK1xcdHUzMiBwd19zZXRfbHNiX21XO1xcdFxcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xcbitcXHR1MzIgcHdfcmVhZF9sc2JfbVc7XFx0XFx0LyogTFNCIG9mIGV4dF9jb25maWcubWF4X3Bvd2VyIHJlYWQtYmFjaywgaW4gbVcgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM4Yl9pbmZvID0ge1xcbitcXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QixcXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJSVEw4MjM4QlxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxcbitcXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzksXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiUlRMODIzOVxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSA0MDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiUlRMODIzOUNcXFwiLFxcbitcXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXFxuK1xcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gNDAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTExX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExLFxcbitcXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXFxuK1xcdC5uYW1lID0gXFxcIkJDTTU5MTExXFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gMjAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxLFxcbitcXHQvKlxcbitcXHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxcbitcXHQgKiBhbmQgdGhlIEdlbjEgZGlhbGVjdCBoYXMgb25seSB0aGUgOC1iaXQvMC4yVyBzZXQgY29tbWFuZCAoXFx1MDAzYz01MVcpO1xcbitcXHQgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLlxcbitcXHQgKi9cXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJCQ001OTEyMVxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxcbitcXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcXG4rfTtcXG4rXFxuKy8qIEhlbHBlcnMgYW5kIGJhc2ljIGZ1bmN0aW9ucyAqL1xcbitcXG4rc3RhdGljIHN0cnVjdCBydHBzZV9tY3VfY3RybCAqdG9fcnRwc2VfbWN1X2N0cmwoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXFxuK3tcXG4rXFx0bWVtc2V0KG1zZywgMHhmZiwgc2l6ZW9mKCptc2cpKTtcXG4rXFx0bXNnLVxcdTAwM2VvcGNvZGUgPSBvcGNvZGU7XFxuK31cXG4rXFxuK3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHR1OCBzdW0gPSAwO1xcbitcXG4rXFx0d2hpbGUgKGxlbi0tKVxcbitcXHRcXHRzdW0gKz0gKmJ1ZisrO1xcbitcXHRyZXR1cm4gc3VtO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwc2UtXFx1MDAzZW11dGV4KSB7XFxuK1xcdFxcdC8qIFJvbGxpbmcgc2VxX251bSBzbyBhIGxhdGUgcmVwbHkgY2FuJ3QgcGFzcyBhcyBhIGxhdGVyIG9uZS4gKi9cXG4rXFx0XFx0cmVxLVxcdTAwM2VzZXFfbnVtID0gcHNlLVxcdTAwM2VzZXErKztcXG4rXFx0XFx0cmVxLVxcdTAwM2VjaGVja3N1bSA9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpO1xcbitcXG4rXFx0XFx0cmV0ID0gcHNlLVxcdTAwM2V0cmFuc3BvcnQtXFx1MDAzZXNlbmQocHNlLCByZXEpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdFxcbitcXHRcXHQgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0b1xcbitcXHRcXHQgKiB1cy4gUGFjZSB0aGUgdHJhbnNhY3Rpb24gaGVyZSBzbyBlYWNoIHRyYW5zcG9ydCBjYW4ga2VlcCBpdHMgcmVjdlxcbitcXHRcXHQgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1zbGVlcChSVFBTRV9NQ1VfUkVTUE9OU0VfTVMpO1xcbitcXG4rXFx0XFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xcbitcXHRcXHRyZXQgPSBwc2UtXFx1MDAzZXRyYW5zcG9ydC1cXHUwMDNlcmVjdihwc2UsIHJlcSwgcmVzcCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4cGxpY2l0IE1DVSBlcnJvciBvcGNvZGVzIChvYnNlcnZlZCBvbiB0aGUgR2VuMSBkaWFsZWN0OyBoYXJtbGVzc1xcbitcXHQgKiB0byBjaGVjayBmb3IgR2VuMiB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQ1xcbitcXHQgKiBtaXNtYXRjaCBwYXRoIHNvIGNhbGxlcnMgc2VlIGEgbWVhbmluZ2Z1bCBlcnJuby5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAocmVzcC1cXHUwMDNlb3Bjb2RlKSB7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFOlxcbitcXHRcXHRyZXR1cm4gLUVCQURFO1xcbitcXHRjYXNlIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU06XFxuK1xcdFxcdHJldHVybiAtRUJBRE1TRztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX05PVF9SRUFEWTpcXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXNwLVxcdTAwM2VvcGNvZGUgIT0gcmVxLVxcdTAwM2VvcGNvZGUgfHxcXG4rXFx0ICAgIHJlc3AtXFx1MDAzZXNlcV9udW0gIT0gcmVxLVxcdTAwM2VzZXFfbnVtIHx8XFxuK1xcdCAgICByZXNwLVxcdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXFxuK1xcdFxcdHJldHVybiAtRUJBRE1TRztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3Bjb2RlKTtcXG4rXFx0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCByZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChyZXNwLVxcdTAwM2VwYXlsb2FkWzBdICE9IHBvcnQpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfY21kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLCB1OCBhcmcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wY29kZSk7XFxuK1xcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcXG4rXFx0cmVxLnBheWxvYWRbMV0gPSBhcmc7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogR2xvYmFsIG9wZXJhdGlvbnMgKi9cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9pbmZvKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3BjLVxcdTAwM2VvcCk7XFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VwYXJzZV9zeXN0ZW1faW5mbyhyZXNwLnBheWxvYWQsIGluZm8pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3BjLVxcdTAwM2VvcCk7XFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2V1dmxvID0gcmVzcC5wYXlsb2FkWzBdO1xcbitcXHRjb25maWctXFx1MDAzZW92bG8gPSByZXNwLnBheWxvYWRbNV07XFxuK1xcdGNvbmZpZy1cXHUwMDNlcHJlYWxsb2NfZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAweDEpO1xcbitcXHRjb25maWctXFx1MDAzZW51bV9vZl9wc2VzID0gcmVzcC5wYXlsb2FkWzZdO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGMtXFx1MDAzZW9wKTtcXG4rXFx0cmVxLnBheWxvYWRbMF0gPSBlbmFibGUgPyAweDEgOiAweDA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAocmVzcC5wYXlsb2FkWzBdID09IDB4MCkgPyAwIDogLUVJTztcXG4rfVxcbitcXG4rLyogUG9ydCBvcGVyYXRpb25zICovXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHN0YXR1cy1cXHUwMDNlc3RzMSA9IHJlc3AucGF5bG9hZFsxXTtcXG4rXFx0c3RhdHVzLVxcdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xcbitcXHRzdGF0dXMtXFx1MDAzZXN0czMgPSByZXNwLnBheWxvYWRbM107XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG1lYXN1cmVtZW50LVxcdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cmVzcC5wYXlsb2FkWzFdKTtcXG4rXFx0bWVhc3VyZW1lbnQtXFx1MDAzZWN1cnJlbnRfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZyZXNwLnBheWxvYWRbM10pO1xcbitcXHRtZWFzdXJlbWVudC1cXHUwMDNldGVtcGVyYXR1cmVfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZyZXNwLnBheWxvYWRbNV0pO1xcbitcXHRtZWFzdXJlbWVudC1cXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZyZXNwLnBheWxvYWRbN10pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2VlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRjb25maWctXFx1MDAzZW1heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTtcXG4rXFx0Y29uZmlnLVxcdTAwM2Vwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV07XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIGVuYWJsZSA/IDB4MSA6IDB4MCk7XFxuK31cXG4rXFxuKy8qIFBTRSBjb250cm9sbGVyIG9wcyAqL1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyBjb25maWc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHBzZSwgaWQsIFxcdTAwMjZjb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0YWRtaW5fc3RhdGUtXFx1MDAzZWMzM19hZG1pbl9zdGF0ZSA9IGNvbmZpZy5lbmFibGUgPyBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRU5BQkxFRCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBzZV9wd19zdGF0dXMgKnB3X3N0YXR1cylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFxcdTAwMjZzdGF0dXMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOlxcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfU0VBUkNISU5HO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19URVNUOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVEVTVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRkFVTFQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVU5LTk9XTjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBzdHMyIGhvbGRzIHRoZSBjbGFzcyBvbmx5IGluIHRoZSBvcGVyYXRpb25hbCBzdGF0ZXMgYmVsb3cuIEluIGFcXG4rXFx0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XFxuK1xcdCAqIGRvZXMgbm90LCBzbyB0aGVyZSBpcyBubyBjbGFzcyB0byByZXBvcnQgYW5kIHdlIHJldHVybiAwLiBUaGF0IGlzXFxuK1xcdCAqIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGNsYXNzLTAgUEQ7IHVzZXJzcGFjZSBkaXNhbWJpZ3VhdGVzXFxuK1xcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxcbitcXHQgKi9cXG4rXFx0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOlxcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxcbitcXHRcXHRyZXR1cm4gcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VwYXJzZV9wb3J0X2NsYXNzKFxcdTAwMjZzdGF0dXMpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFxcdTAwMjZtZWFzdXJlbWVudCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiAxMDBtVyBwZXIgTFNCICovXFxuK1xcdHJldHVybiBtZWFzdXJlbWVudC5wb3dlcl9yYXcgKiAxMDBVO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcXG4rXFx0aW50IHJldDtcXG4rXFx0dTMyIHVWO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFxcdTAwMjZtZWFzdXJlbWVudCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiA2NC40NW1WIHBlciBMU0IgKi9cXG4rXFx0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcXG4rXFx0cmV0dXJuIG1pbl90KHUzMiwgdVYsIElOVF9NQVgpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2VuYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcXHUwMDI2Y29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVxcdTAwM2VjaGlwLVxcdTAwM2Vwd19yZWFkX2xzYl9tVztcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgaW50IG1heF9tVylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqdHlwZV9vcGMsICp2YWxfb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXAgPSBwc2UtXFx1MDAzZWNoaXA7XFxuK1xcdHU4IHByZ192YWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAobWF4X21XIFxcdTAwM2MgMCB8fCBtYXhfbVcgXFx1MDAzZSBjaGlwLVxcdTAwM2VtYXhfbVdfcGVyX3BvcnQpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0dHlwZV9vcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXTtcXG4rXFx0dmFsX29wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtjaGlwLVxcdTAwM2Vwd19zZXRfY21kXTtcXG4rXFx0LyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqL1xcbitcXHRpZiAoIXR5cGVfb3BjLVxcdTAwM2V2YWxpZCB8fCAhdmFsX29wYy1cXHUwMDNldmFsaWQgfHwgIWNoaXAtXFx1MDAzZXB3X3NldF9sc2JfbVcpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN3aXRjaCB0aGUgcG9ydCB0byB1c2VyLWRlZmluZWQgbGltaXQgbW9kZSBmaXJzdCwgdGhlbiBwcm9ncmFtIHRoZVxcbitcXHQgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW5cXG4rXFx0ICogdXNlci1kZWZpbmVkIG1vZGUgYnV0IHdpdGggdGhlIHByZXZpb3VzIGxpbWl0IHZhbHVlOyB0aGUgbmV4dFxcbitcXHQgKiBzdWNjZXNzZnVsIHNldF9wd19saW1pdCBjYWxsIHJlY292ZXJzIGl0LlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHR5cGVfb3BjLVxcdTAwM2VvcCwgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXFx1MDAzZXB3X3NldF9sc2JfbVcsIFU4X01BWCk7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHZhbF9vcGMtXFx1MDAzZW9wLCBwcmdfdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwc2VfcHdfbGltaXRfcmFuZ2VzICpvdXQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBldGh0b29sX2MzM19wc2VfcHdfbGltaXRfcmFuZ2UgKnJhbmdlO1xcbitcXG4rXFx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpO1xcbitcXHRpZiAoIXJhbmdlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJhbmdlWzBdLm1pbiA9IDA7XFxuK1xcdHJhbmdlWzBdLm1heCA9IHBzZS1cXHUwMDNlY2hpcC1cXHUwMDNlbWF4X21XX3Blcl9wb3J0O1xcbitcXG4rXFx0b3V0LVxcdTAwM2VjMzNfcHdfbGltaXRfcmFuZ2VzID0gcmFuZ2U7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsIFxcdTAwMjZjb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGNvbmZpZy5wcmlvcml0eTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJpbylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFxuK1xcdGlmIChwcmlvIFxcdTAwM2UgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy1cXHUwMDNlb3AsIHByaW8pO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0ge1xcbitcXHQucGlfZ2V0X2FkbWluX3N0YXRlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlLFxcbitcXHQucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsXFxuK1xcdC5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsXFxuK1xcdC5waV9nZXRfYWN0dWFsX3B3ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyxcXG4rXFx0LnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSxcXG4rXFx0LnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLFxcbitcXHQucGlfZ2V0X3ZvbHRhZ2UgPSBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSxcXG4rXFx0LnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCxcXG4rXFx0LnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCxcXG4rXFx0LnBpX2dldF9wd19saW1pdF9yYW5nZXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzLFxcbitcXHQucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyxcXG4rXFx0LnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnO1xcbitcXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXFxuK1xcdCAqICgtRU5YSU8gLyAtRVJFTU9URUlPKSwgcmVwb3J0IG5vdC1yZWFkeSAoLUVBR0FJTiksIG9yIGVtaXQgYVxcbitcXHQgKiBjb3JydXB0L3BhcnRpYWwgZnJhbWUgKC1FQkFETVNHIC8gLUVCQURFKS4gUmV0cnkgdGhvc2Ugd2l0aGluIGFcXG4rXFx0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXFxuK1xcdCAqIGltbWVkaWF0ZWx5LlxcbitcXHQgKi9cXG4rXFx0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRyZXQgPSBydHBzZV9tY3VfZ2V0X2luZm8ocHNlLCBpbmZvKTtcXG4rXFx0XFx0aWYgKHJldCAhPSAtRVRJTUVET1VUIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU5YSU8gXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FUkVNT1RFSU8gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHJldCAhPSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUJBRE1TRyBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVCQURFKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0bXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTtcXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIHJldCwgXFxcImZhaWxlZCB0byByZWFkIE1DVSBpbmZvXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHN3aXRjaCAoaW5mby1cXHUwMDNlZGV2aWNlX2lkKSB7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNnJ0bDgyMzhiX2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOTpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNnJ0bDgyMzlfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QzpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNnJ0bDgyMzljX2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZiY201OTExMV9pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxOlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2YmNtNTkxMjFfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCAtRUlOVkFMLCBcXFwidW5rbm93biBQU0UgaWQgMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VkZXZpY2VfaWQpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZW1heF9wb3J0cyB8fCBpbmZvLVxcdTAwM2VtYXhfcG9ydHMgXFx1MDAzZSBSVFBTRV9NQ1VfTUFYX1BPUlRTKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiTUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XFxcXG5cXFwiLCBpbmZvLVxcdTAwM2VtYXhfcG9ydHMpO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgXFx1MDAyNmV4dF9jb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcXFxcblxcXCIpO1xcbitcXG4rXFx0ZGV2X2luZm8ocHNlLVxcdTAwM2VkZXYsIFxcXCIlcyBNQ1UsICVzIChpZCAweCUwNHgpLCAldSBwb3J0cyBhY3Jvc3MgJXUgUFNFIGNoaXAocylcXFxcblxcXCIsXFxuK1xcdFxcdCBwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW1jdV90eXBlX3N0cihpbmZvLVxcdTAwM2VtY3VfdHlwZSksIHBzZS1cXHUwMDNlY2hpcC1cXHUwMDNlbmFtZSxcXG4rXFx0XFx0IGluZm8tXFx1MDAzZWRldmljZV9pZCwgaW5mby1cXHUwMDNlbWF4X3BvcnRzLCBleHRfY29uZmlnLm51bV9vZl9wc2VzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcXG4rXFxuK1xcdHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgZmFsc2UpO1xcbit9XFxuK1xcbitpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xcbitcXHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX211dGV4X2luaXQocHNlLVxcdTAwM2VkZXYsIFxcdTAwMjZwc2UtXFx1MDAzZW11dGV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFtYXRjaClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FTk9ERVYsIFxcXCJtaXNzaW5nIG1hdGNoIGRhdGFcXFxcblxcXCIpO1xcbitcXHRwc2UtXFx1MDAzZWRpYWxlY3QgPSBtYXRjaC1cXHUwMDNlZGlhbGVjdDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhdGNoIGEgZGlhbGVjdCB0aGF0IGZvcmdvdCB0byBzZXQgb25lIG9mIHRoZSByZXF1aXJlZCBob29rcyBhdFxcbitcXHQgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJ2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwc2UtXFx1MDAzZWRpYWxlY3QgfHxcXG4rXFx0ICAgICFwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvIHx8XFxuK1xcdCAgICAhcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VwYXJzZV9wb3J0X2NsYXNzIHx8XFxuK1xcdCAgICAhcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VtY3VfdHlwZV9zdHIpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXFxcblxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVsZWFzZSB0aGUgTUNVIGZyb20gcmVzZXQgYmVmb3JlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbjsgdGhlXFxuK1xcdCAqIGJvb3QtcmV0cnkgbG9vcCBpbiBkaXNjb3ZlcigpIHdhaXRzIGZvciBpdCB0byBhbnN3ZXIuXFxuK1xcdCAqL1xcbitcXHRncGlvZCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHBzZS1cXHUwMDNlZGV2LCBcXFwicmVzZXRcXFwiLCBHUElPRF9PVVRfTE9XKTtcXG4rXFx0aWYgKElTX0VSUihncGlvZCkpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCByZXNldCBncGlvXFxcXG5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNvbWUgYm9hcmRzIGdhdGUgYWxsIHBvcnRzIHRocm91Z2ggYSBoYXJkd2FyZSBsaW5lOyBkZWFzc2VydCBpdCBzb1xcbitcXHQgKiB0aGUgTUNVIHByb3RvY29sIGdvdmVybnMgcGVyLXBvcnQgYWRtaW4gc3RhdGUgZnJvbSBoZXJlIG9uLlxcbitcXHQgKi9cXG4rXFx0Z3Bpb2QgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXFx1MDAzZWRldiwgXFxcImRpc2FibGUtcG9ydHNcXFwiLCBHUElPRF9PVVRfTE9XKTtcXG4rXFx0aWYgKElTX0VSUihncGlvZCkpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBkaXNhYmxlLXBvcnRzIGdwaW9cXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2Rpc2NvdmVyKHBzZSwgXFx1MDAyNmluZm8pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKCFpbmZvLnN5c3RlbV9lbmFibGUpIHtcXG4rXFx0XFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcXG4rXFx0XFx0LyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEdlbjEpIHJldHVyblxcbitcXHRcXHQgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyBcXFwibm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkXFxcIi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoIXJldCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50XFxuK1xcdCAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbid0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yXFxuK1xcdCAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyXFxuK1xcdCAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuXFxuK1xcdCAqL1xcbitcXG4rXFx0LyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXJcXG4rXFx0ICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuXFxuK1xcdCAqL1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2Lm9wcyAgICAgID0gXFx1MDAyNnJ0cHNlX21jdV9vcHM7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYuZGV2ICAgICAgPSBwc2UtXFx1MDAzZWRldjtcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMztcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzO1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTtcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcXG4rXFxuK1xcdHJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS1cXHUwMDNlZGV2LCBcXHUwMDI2cHNlLVxcdTAwM2VwY2Rldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X3JlZ2lzdGVyKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0aW5mby1cXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcXG4rXFx0aW5mby1cXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdC8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi9cXG4rXFx0cmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtXFx1MDAzZXN0czIpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjJfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcXG4re1xcbitcXHRzd2l0Y2ggKG1jdV90eXBlKSB7XFxuK1xcdGNhc2UgMHgwMDpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYzMTBcXFwiO1xcbitcXHRjYXNlIDB4MDE6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJGMjMwXFxcIjtcXG4rXFx0Y2FzZSAweDAyOlxcdHJldHVybiBcXFwiR2lnYURldmljZSBHRDMyRjMwM1xcXCI7XFxuK1xcdGNhc2UgMHgwMzpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYxMDNcXFwiO1xcbitcXHRjYXNlIDB4MDQ6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJFMTAzXFxcIjtcXG4rXFx0Y2FzZSAweDEwOlxcdHJldHVybiBcXFwiTnV2b3RvbiBNMDUxNlxcXCI7XFxuK1xcdGNhc2UgMHgxMTpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1NjRcXFwiO1xcbitcXHRjYXNlIDB4MTI6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE5VQzAyOVxcXCI7XFxuK1xcdGRlZmF1bHQ6XFx0cmV0dXJuIFxcXCJ1bmtub3duXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxcbit7XFxuK1xcdGluZm8tXFx1MDAzZW1heF9wb3J0cyA9IHBheWxvYWRbMV07XFxuK1xcdC8qIEdlbjEgaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxcbitcXHQgKiBcXFwicmVtb3RlIGVuYWJsZVxcXCIgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXFxuK1xcdCAqL1xcbitcXHRpbmZvLVxcdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcXHUwMDI2IEJJVCgyKSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdC8qIEdlbjEgcHV0cyB0aGUgZGV0ZWN0ZWQgY2xhc3MgaW4gcGF5bG9hZFszXSAoPT0gc3RzMykgZGlyZWN0bHkuXFxuK1xcdCAqIE1hc2sgdG8gdGhlIGxvdyBuaWJibGU7IGNsYXNzIGlzIDAuLjggYW5kIGFueSBoaWdoIGJpdHMgd291bGQgYmVcXG4rXFx0ICogbm9pc2UuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gc3RhdHVzLVxcdTAwM2VzdHMzIFxcdTAwMjYgMHgwZjtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4xX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXFxuK3tcXG4rXFx0c3dpdGNoIChtY3VfdHlwZSkge1xcbitcXHRjYXNlIDB4MDA6XFx0cmV0dXJuIFxcXCJTVCBNaWNybyBTVDMyRjEwMFxcXCI7XFxuK1xcdGNhc2UgMHgwMTpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1eHggTEFOXFxcIjtcXG4rXFx0Y2FzZSAweDAyOlxcdHJldHVybiBcXFwiU1QgTWljcm8gU1RGMDMwQzhcXFwiO1xcbitcXHRjYXNlIDB4MDM6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE0wNThTQU5cXFwiO1xcbitcXHRjYXNlIDB4MDQ6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE5VQzEyMlxcXCI7XFxuK1xcdGRlZmF1bHQ6XFx0cmV0dXJuIFxcXCJ1bmtub3duXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiA9IHtcXG4rXFx0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8sXFxuK1xcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3BvcnRfY2xhc3MsXFxuK1xcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cixcXG4rXFx0Lm9wY29kZSA9IHtcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cXHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDApLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDRhKSxcXG4rXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MDEpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDEyKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdXFx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVF0gPSBSVFBTRV9NQ1VfT1AoMHgxNCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVxcdD0gUlRQU0VfTUNVX09QKDB4MTUpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVxcdD0gUlRQU0VfTUNVX09QKDB4NDQpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHg0OCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXFx0PSBSVFBTRV9NQ1VfT1AoMHg0OSksXFxuK1xcdH0sXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjEgPSB7XFxuK1xcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvLFxcbitcXHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzLFxcbitcXHQubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIsXFxuK1xcdC5vcGNvZGUgPSB7XFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDIwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgyYiksXFxuK1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxNSksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVxcdD0gUlRQU0VfTUNVX09QKDB4MTYpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cXHQ9IFJUUFNFX01DVV9PUCgweDFhKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MjEpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cXHQ9IFJUUFNFX01DVV9PUCgweDMwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MjUpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVxcdD0gUlRQU0VfTUNVX09QKDB4MjYpLFxcbitcXHR9LFxcbit9O1xcbitcXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGEgPSB7XFxuK1xcdC5kaWFsZWN0ID0gXFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjEsXFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4xX2RhdGEpO1xcbitcXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2RhdGEgPSB7XFxuK1xcdC5kaWFsZWN0ID0gXFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2RhdGEpO1xcbitcXG4rLyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqL1xcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgPSB7XFxuK1xcdC5kaWFsZWN0ID0gXFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXFxuK1xcdC5uYXRpdmVfaTJjID0gdHJ1ZSxcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoY29yZSlcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmUxMGY4YzYzM2I2OGVjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcXG5AQCAtMCwwICsxLDE3MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pMmMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInJlYWx0ZWstcHNlLW1jdS5oXFxcIlxcbitcXG4rLypcXG4rICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc29cXG4rICogdGhlIHJlc3BvbnNlIGlzIG5vcm1hbGx5IHJlYWR5IG9uIHRoZSB2ZXJ5IGZpcnN0IHJlYWQuIEZvciBjb21tYW5kcyB0aGVcXG4rICogTUNVIHByb2R1Y2VzIG1vcmUgc2xvd2x5LCBrZWVwIHBvbGxpbmcgYXQgdGhlIHR5cGljYWwgcmVzcG9uc2UgY2FkZW5jZVxcbisgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TXFx0UlRQU0VfTUNVX1JFU1BPTlNFX01TXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcXHQoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUyAvIFJUUFNFX01DVV9JMkNfUkVUUllfTVMpXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXFx1MDAzZWRldik7XFxuK1xcbitcXHQvKiBTZW5kIG9wY29kZSBhcyBTTUJ1cyBjb21tYW5kIGJ5dGU7IHJlbWFpbmluZyAxMSBieXRlcyBhcyBibG9jayBkYXRhICovXFxuK1xcdHJldHVybiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCByZXEtXFx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgKHU4ICopcmVxICsgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVxcdTAwM2VkZXYpO1xcbitcXHRpbnQgdHJpZXMsIHJldDtcXG4rXFxuK1xcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XFxuK1xcdFxcdGlmICh0cmllcyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdG1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTtcXG4rXFxuK1xcdFxcdC8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqL1xcbitcXHRcXHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAodTggKilyZXNwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFxcdTAwMjZcXHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcXG4rXFx0LnNlbmQgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQsXFxuK1xcdC5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0dm9pZCAqYnVmO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogaTJjX21hc3Rlcl9zZW5kKCkgbWF5IERNQSwgc28gdGhlIGJ1ZmZlciBtdXN0IG5vdCBiZSBvbiB0aGUgc3RhY2suICovXFxuK1xcdGJ1ZiA9IGttZW1kdXAocmVxLCBSVFBTRV9NQ1VfTVNHX1NJWkUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJ1ZilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XFxuK1xcdGtmcmVlKGJ1Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVxcdTAwM2VkZXYpO1xcbitcXHRpbnQgdHJpZXMsIHJldDtcXG4rXFx0dTggKmJ1ZjtcXG4rXFxuK1xcdC8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqL1xcbitcXHRidWYgPSBrbWFsbG9jKFJUUFNFX01DVV9NU0dfU0laRSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghYnVmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XFxuK1xcdFxcdGlmICh0cmllcyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdG1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTtcXG4rXFxuK1xcdFxcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSkge1xcbitcXHRcXHRcXHRtZW1jcHkocmVzcCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpO1xcbitcXHRcXHRcXHRpZiAocnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0ID0gLUVUSU1FRE9VVDtcXG4rb3V0OlxcbitcXHRrZnJlZShidWYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA9IHtcXG4rXFx0LnNlbmQgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kLFxcbitcXHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlO1xcbitcXHRib29sIHVzZV9uYXRpdmU7XFxuK1xcbitcXHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xcbitcXHRpZiAoIW1hdGNoKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFxcXCJtaXNzaW5nIG1hdGNoIGRhdGFcXFxcblxcXCIpO1xcbitcXG4rXFx0LyogVGhlIGZyYW1pbmcgKHJhdyBJMkMgdnMgU01CdXMpIGlzIGNhcnJpZWQgYnkgdGhlIG1hdGNoIGRhdGEuICovXFxuK1xcdHVzZV9uYXRpdmUgPSBtYXRjaC1cXHUwMDNlbmF0aXZlX2kyYztcXG4rXFx0aWYgKHVzZV9uYXRpdmUpIHtcXG4rXFx0XFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXFx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVPUE5PVFNVUFAsXFxuK1xcdFxcdFxcdFxcdFxcXCJwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcXFxcblxcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cXHUwMDNlYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcXG4rXFx0XFx0XFx0XFx0XFxcIlNNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdHBzZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHNlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBzZS1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XFxuK1xcdHBzZS1cXHUwMDNldHJhbnNwb3J0ID0gdXNlX25hdGl2ZSA/IFxcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcXHUwMDI2cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3JlZ2lzdGVyKHBzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1xcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4yX2RhdGEgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcXFwiLCAuZGF0YSA9IFxcdTAwMjZydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YSB9LFxcbitcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X2kyY19vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRwc2VfbWN1X2kyY19kcml2ZXIgPSB7XFxuK1xcdC5kcml2ZXIgPSB7XFxuK1xcdFxcdC5uYW1lXFx0XFx0PSBcXFwicmVhbHRlay1wc2UtbWN1LWkyY1xcXCIsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZVxcdD0gcnRwc2VfbWN1X2kyY19vZl9tYXRjaCxcXG4rXFx0fSxcXG4rXFx0LnByb2JlXFx0XFx0PSBydHBzZV9tY3VfaTJjX3Byb2JlLFxcbit9O1xcbittb2R1bGVfaTJjX2RyaXZlcihydHBzZV9tY3VfaTJjX2RyaXZlcik7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKb25hcyBKZWxvbmVrIFxcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChJMkMgdHJhbnNwb3J0KVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YmFhMTdkOGQzMWZhMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xcbkBAIC0wLDAgKzEsMTY0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGxldGlvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VyZGV2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwicmVhbHRlay1wc2UtbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFxcdDE5MjAwXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVFxcdG1zZWNzX3RvX2ppZmZpZXMoMTAwKVxcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVRcXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlO1xcbitcXHRzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2O1xcbitcXHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xcbitcXHRzcGlubG9ja190IHJ4X2xvY2s7XFx0XFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cXG4rXFx0c2l6ZV90IHJ4X2xlbjtcXG4rXFx0dTggcnhfYnVmW1JUUFNFX01DVV9NU0dfU0laRV07XFxuK307XFxuK1xcbisjZGVmaW5lIHRvX3J0cHNlX21jdV91YXJ0KHApICBjb250YWluZXJfb2YocCwgc3RydWN0IHJ0cHNlX21jdV91YXJ0LCBwc2UpXFxuK1xcbisvKlxcbisgKiBObyBmcmFtaW5nIGlzIGRvbmUgaGVyZTogYSBnbGl0Y2hlZCBmcmFtZSBjb3N0cyBvbmUgdHJhbnNhY3Rpb24sIHRoZW5cXG4rICogdGhlIG5leHQgX3NlbmQgcmUtZnJhbWVzIGZyb20gcnhfbGVuIDAuIFJlc3luYyB3b3JrcyBieSByZXR1cm5pbmcgY291bnRcXG4rICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZFxcbisgKiBpbnRvIHRoZSBuZXh0IGZyYW1lLlxcbisgKi9cXG4rc3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpO1xcbitcXHRzaXplX3QgdGFrZTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKSB7XFxuK1xcdFxcdHRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtXFx1MDAzZXJ4X2J1ZikgLSBjdHgtXFx1MDAzZXJ4X2xlbik7XFxuK1xcdFxcdGlmICh0YWtlKSB7XFxuK1xcdFxcdFxcdG1lbWNweShjdHgtXFx1MDAzZXJ4X2J1ZiArIGN0eC1cXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXJ4X2xlbiArPSB0YWtlO1xcbitcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9sZW4gPT0gc2l6ZW9mKGN0eC1cXHUwMDNlcnhfYnVmKSlcXG4rXFx0XFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmN0eC1cXHUwMDNlcnhfZG9uZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgcnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyA9IHtcXG4rXFx0LnJlY2VpdmVfYnVmID0gcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSxcXG4rXFx0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcXG4rXFx0aW50IHdyaXR0ZW47XFxuK1xcbitcXHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jaykge1xcbitcXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyeF9sZW4gPSAwO1xcbitcXHR9XFxuK1xcbitcXHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXFx1MDAzZXNlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQpO1xcbitcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXHRpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7XFxuK1xcbitcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSlcXG4rXFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jaykge1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRcXHRtZW1jcHkocmVzcCwgY3R4LVxcdTAwM2VyeF9idWYsIHNpemVvZigqcmVzcCkpO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X3VhcnRfc2VuZCxcXG4rXFx0LnJlY3YgPSBydHBzZV9tY3VfdWFydF9yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxcbit7XFxuK1xcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnNlcmRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eDtcXG4rXFx0dW5zaWduZWQgaW50IGJhdWQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRjdHgtXFx1MDAzZXNlcmRldiA9IHNlcmRldjtcXG4rXFx0Y3R4LVxcdTAwM2Vwc2UuZGV2ID0gZGV2O1xcbitcXHRjdHgtXFx1MDAzZXBzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xcbitcXHRjdHgtXFx1MDAzZXBzZS50cmFuc3BvcnQgPSBcXHUwMDI2cnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcztcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2RvbmUpO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKTtcXG4rXFxuK1xcdHNlcmRldl9kZXZpY2Vfc2V0X2RydmRhdGEoc2VyZGV2LCBjdHgpO1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwgXFx1MDAyNnJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9zZXJkZXZfZGV2aWNlX29wZW4oZGV2LCBzZXJkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBvcGVuIHNlcmRldlxcXFxuXFxcIik7XFxuK1xcbitcXHRmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCBcXFwiY3VycmVudC1zcGVlZFxcXCIsIFxcdTAwMjZzcGVlZCk7XFxuK1xcbitcXHRiYXVkID0gc2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7XFxuK1xcdGlmIChiYXVkICE9IHNwZWVkKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJjb3VsZCBub3Qgc2V0IGJhdWRyYXRlICV1LCBjb250cm9sbGVyIHVzZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBzcGVlZCwgYmF1ZCk7XFxuK1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woc2VyZGV2LCBmYWxzZSk7XFxuK1xcbitcXHRyZXQgPSBzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJjb3VsZCBub3Qgc2V0IHBhcml0eSB0byBub25lOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXFx1MDAyNmN0eC1cXHUwMDNlcHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMVxcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMlxcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4yX2RhdGEgfSxcXG4rXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9kcml2ZXIgcnRwc2VfbWN1X3VhcnRfZHJpdmVyID0ge1xcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJyZWFsdGVrLXBzZS1tY3UtdWFydFxcXCIsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZSA9IHJ0cHNlX21jdV91YXJ0X29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmUgID0gcnRwc2VfbWN1X3VhcnRfcHJvYmUsXFxuK307XFxuK21vZHVsZV9zZXJkZXZfZGV2aWNlX2RyaXZlcihydHBzZV9tY3VfdWFydF9kcml2ZXIpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMGEzMTk3YzljOWNkMWRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXFxuQEAgLTAsMCArMSw4OSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbitcXG4rI2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0hcXG4rI2RlZmluZSBfUkVBTFRFS19QU0VfTUNVX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxcbisgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZVxcbisgKiB1bmRlcmx5aW5nIHRyYW5zcG9ydDogdGhlIGNvcmUgcGFjZXMgdHJhbnNhY3Rpb25zIGJ5IFJUUFNFX01DVV9SRVNQT05TRV9NU1xcbisgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXFxuKyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXNcXG4rICogbmVlZGluZyB1cCB0byB+MXMgdG8gcHJvZHVjZSBhIHJlcGx5LlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcXHRcXHRcXHQyNVxcbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVNcXHRcXHQxMDAwXFxuK1xcbisvKlxcbisgKiBUb3RhbCB0aW1lIHRvIGtlZXAgcmV0cnlpbmcgdGhlIGZpcnN0IE1DVSByZWFkIGF0IHByb2JlLCBhbmQgdGhlIHBhdXNlXFxuKyAqIGJldHdlZW4gYXR0ZW1wdHMuIFJpZ2h0IGFmdGVyIGVuYWJsZS1ncGlvcyBpcyBhc3NlcnRlZCB0aGUgTUNVIG1heSBub3RcXG4rICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcXG4rICogZGVjbGFyaW5nIHRoZSBwcm9iZSBmYWlsZWQuXFxuKyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcXHRcXHQzMDAwXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVNcXHRcXHRcXHQxMDBcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX01TR19TSVpFXFx0XFx0XFx0MTJcXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfbXNnIHtcXG4rXFx0dTggb3Bjb2RlO1xcbitcXHR1OCBzZXFfbnVtO1xcbitcXHR1OCBwYXlsb2FkWzldO1xcbitcXHR1OCBjaGVja3N1bTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qXFxuKyAqIE1DVSBzdGF0dXMgb3Bjb2RlcyAoc2VlbiBvbiB0aGUgR2VuMSBkaWFsZWN0OyBHZW4yIG5ldmVyIGVtaXRzIHRoZW0pLlxcbisgKiBJTkNPTVBMRVRFL0JBRF9DU1VNIGFyZSB0ZXJtaW5hbDsgTk9UX1JFQURZIGlzIHRyYW5zaWVudC5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXFx0XFx0MHhmZFxcdC8qIC1FQkFERSAgICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTVxcdFxcdDB4ZmVcXHQvKiAtRUJBRE1TRyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZXFx0XFx0MHhmZlxcdC8qIC1FQUdBSU4gICovXFxuK1xcbisvKiBBIHBvbGxpbmcgdHJhbnNwb3J0IGNhbiBzdG9wIGhlcmU6IHRoZSBtYXRjaGluZyByZXBseSwgb3IgYSB0ZXJtaW5hbCBlcnJvci4gKi9cXG4rc3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHJldHVybiByZXNwLVxcdTAwM2VvcGNvZGUgPT0gcmVxLVxcdTAwM2VvcGNvZGUgfHxcXG4rXFx0ICAgICAgIHJlc3AtXFx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHxcXG4rXFx0ICAgICAgIHJlc3AtXFx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNO1xcbit9XFxuK1xcbisvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovXFxuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdDtcXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm87XFxuK3N0cnVjdCBydHBzZV9tY3VfY3RybDtcXG4rXFxuKy8qIFBlci1jb21wYXRpYmxlIG1hdGNoIGRhdGEgKHRoZSBvZl9tYXRjaCAuZGF0YSkuICovXFxuK3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcXG4rXFx0Ym9vbCBuYXRpdmVfaTJjO1xcdC8qIHJhdy1JMkMgZnJhbWluZyAodnMgU01CdXMpOyBJMkMgdHJhbnNwb3J0IG9ubHkgKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyB7XFxuK1xcdGludCAoKnNlbmQpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKTtcXG4rXFx0aW50ICgqcmVjdikoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XFxuK1xcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi9cXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7XFxuK1xcdHU4IHNlcTtcXHRcXHRcXHQvKiByb2xsaW5nIHJlcXVlc3Qgc2VxX251bSwgZWNob2VkIGJ5IHRoZSBNQ1UgKi9cXG4rfTtcXG4rXFxuK2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpO1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2RhdGE7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGE7XFxuK1xcbisjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDE6MTU6MTguNTYwNTc5MzE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzA5MDgzNzcyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9JMkNcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9VQVJUXCIsXG4gICAgXCJTRVJJQUxfREVWX0JVU1wiLFxuICAgIFwiSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRwc2VfbWN1X3JlZ2lzdGVyXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9lbmFibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2Rpc2FibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHN1cHBvcnRpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gVGhlIGRyaXZlciBleHBvc2VzIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlIHZpYSBldGh0b29sIG5ldGxpbmsgYW5kIHBhcnNlcyBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBvdmVyIEkyQy9VQVJULiBJdCBjYW4gYmUgcHJvYmVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBJMkMgc3lzZnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiODZjMjE2NjIwNTlkYTQ4MWU3MTlhYjlhZGFlYWU4NzdhMDY4MWUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDE6MTU6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wZjFhODE5ZGI0OWJiY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxuQEAgLTAsMCArMSwxODAgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogUmVhbHRlayBQU0UgTUNVXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjogfFxuKyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudClcbisgIGhhcmR3YXJlIG9uIGEgcmFuZ2Ugb2YgbWFuYWdlZCBQb0Ugc3dpdGNoZXMuIFRoZSBob3N0IENQVSB0YWxrcyBvbmx5IHRvXG4rICB0aGlzIE1DVSAtIG92ZXIgSTJDL1NNQnVzIG9yIFVBUlQgLSB1c2luZyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7XG4rICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkXG4rICBkaXJlY3RseS4gRm9yIGV4YW1wbGUsIG9uIHRoZSBaeXhlbCBHUzE5MDAtMTBIUCB0aGUgU29DIHJlYWNoZXMgdGhlIE1DVVxuKyAgb3ZlciBVQVJULCBhbmQgdGhlIE1DVSBtYW5hZ2VzIHRoZSBvbi1ib2FyZCBQU0UgY2hpcC5cbitcbisgIFRoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIE1DVSB0b2dldGhlciB3aXRoIGl0cyBSZWFsdGVrIGZpcm13YXJlOiB0aGVcbisgIGZpcm13YXJlIGFuZCBpdHMgaG9zdCBwcm90b2NvbCwgd2hpY2ggYXJlIHN0YWJsZSBhY3Jvc3MgYm9hcmRzLiBUaGVcbisgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGVcbisgIFBTRSBzaWxpY29uIGJlaGluZCB0aGUgTUNVIChSZWFsdGVrIFJUTDgyM3gvUlRMODIzOSogb3IgQnJvYWRjb21cbisgIEJDTTU5eHh4KSBpcyByZXBvcnRlZCBieSB0aGUgTUNVIGFuZCBkZXRlY3RlZCBhdCBydW50aW1lIC0gbmVpdGhlciBpc1xuKyAgbmFtZWQgaGVyZS5cbitcbisgIFR3byBwcm90b2NvbCBnZW5lcmF0aW9ucyBleGlzdCwgYm90aCBSZWFsdGVrJ3M6XG4rICAgIGdlbjEgIG9sZGVyIGJvYXJkcywgd2hlcmUgdGhlIE1DVSBmcm9udHMgQnJvYWRjb20gUFNFIHNpbGljb25cbisgICAgZ2VuMiAgdGhlIGFsdGVyZWQgcHJvdG9jb2wgdXNlZCB3aXRoIFJlYWx0ZWsncyBvd24gUFNFIHNpbGljb25cbitcbisgIE9uIGFuIEkyQyBhdHRhY2htZW50IHRoZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBpcyBwYXJ0IG9mIHRoZVxuKyAgY29tcGF0aWJsZTogJy1zbWJ1cycgKHJlYWRzIGNhcnJ5IGEgbGVhZGluZyBjb21tYW5kIGJ5dGUgYW5kIGEgcmVwZWF0ZWRcbisgIHN0YXJ0KSBvciAnLWkyYycgKGJhcmUgYmxvY2sgd3JpdGVzIGFuZCByZWFkcykuIEEgVUFSVCBhdHRhY2htZW50IGNhcnJpZXNcbisgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJ3NlcmlhbCcgbm9kZS5cbitcbisgIEVhY2ggYm9hcmQgYWRkaXRpb25hbGx5IGNhcnJpZXMgYSBkZXZpY2Utc3BlY2lmaWMgY29tcGF0aWJsZSB0aGF0IGZhbGxzXG4rICBiYWNrIHRvIG9uZSBvZiB0aGUgcHJvdG9jb2wgY29tcGF0aWJsZXMgYWJvdmUuIERyaXZlcnMgYmluZCBvbiB0aGVcbisgIHByb3RvY29sIGNvbXBhdGlibGU7IHRoZSBkZXZpY2Utc3BlY2lmaWMgc3RyaW5nIGlkZW50aWZpZXMgdGhlIGJvYXJkIGFuZFxuKyAgcmVzZXJ2ZXMgYSBwbGFjZSBmb3IgYSBmdXR1cmUgcGVyLWJvYXJkIHF1aXJrIHdpdGhvdXQgaGF2aW5nIHRvIHJldHJvZml0XG4rICBkZXZpY2UgdHJlZXMgYWxyZWFkeSBpbiB0aGUgZmllbGQuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIG9uZU9mOlxuKyAgICAgICMgVUFSVFxuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYTEtcHNlXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xXG4rXG4rICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkyMC0yNGhwLXYyLXBzZVxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1xuK1xuKyAgICAgICMgVUFSVFxuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYjEtcHNlXG4rICAgICAgICAgICAgICAtIHp5eGVsLHhtZzE5MTUtMTBlcC1wc2VcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjJcbitcbisgICAgICAjIEkyQywgU01CdXMgZnJhbWluZ1xuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0genl4ZWwseHMxOTMwLTEyaHAtcHNlXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXG4rXG4rICAgICAgIyBJMkMsIHJhdyBmcmFtaW5nXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSBsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICByZXNldC1ncGlvczpcbisgICAgZGVzY3JpcHRpb246IFJlc2V0IGxpbmUgb2YgdGhlIE1DVS5cbisgICAgbWF4SXRlbXM6IDFcbitcbisgIGRpc2FibGUtcG9ydHMtZ3Bpb3M6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEhhcmR3YXJlIGdhdGUgdGhhdCBmb3JjZXMgYWxsIHBvcnRzIGludG8gYWRtaW4tZGlzYWJsZWQgc3RhdGUgd2hpbGVcbisgICAgICBhc3NlcnRlZC5cbisgICAgbWF4SXRlbXM6IDFcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sI1xuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbisgICMgQSAnLXNtYnVzJy8nLWkyYycgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICdyZWcnIGFuZFxuKyAgIyBjYW5ub3QgY2Fycnkgc2VyaWFsIGJ1cyBwcm9wZXJ0aWVzLiBBIGJhcmUgZ2VuIGNvbXBhdGlibGUgaXMgYSBVQVJUXG4rICAjIGF0dGFjaG1lbnQ6IG5vICdyZWcnLCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnRhaW5zOlxuKyAgICAgICAgICAgIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1xuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSByZWdcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY3VycmVudC1zcGVlZDogZmFsc2VcbisgICAgICAgIG1heC1zcGVlZDogZmFsc2VcbisgICAgZWxzZTpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOiBmYWxzZVxuK1xuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgICMgU01CdXMtZnJhbWVkIEkyQyBhdHRhY2htZW50XG4rICAtIHxcbisgICAgaTJjIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwienl4ZWwseHMxOTMwLTEyaHAtcHNlXCIsIFwicmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MweDIwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgIHBzZS1waXMge1xuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICB9O1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuK1xuKyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XG4rICAtIHxcbisgICAgaTJjIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwibGlua3N5cyxsZ3MzMjhtcGMtdjItcHNlXCIsIFwicmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbitcbisgICAgICAgICAgICBwc2UtcGlzIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisgICMgVUFSVCBhdHRhY2htZW50XG4rICAtIHxcbisgICAgc2VyaWFsIHtcbisgICAgICAgIGV0aGVybmV0LXBzZSB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwienl4ZWwsZ3MxOTAwLTEwaHAtYTEtcHNlXCIsIFwicmVhbHRlayxwc2UtbWN1LWdlbjFcIjtcbisgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gXHUwMDNjMTkyMDBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgcHNlLXBpcyB7XG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNjBjZmYwMDk1M2RjYmUuLjE2MTM2YWMxMWUwNjM3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMjI3MzYsNiArMjI3MzYsMTMgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0aW5jbHVkZS9zb3VuZC9ydCouaFxuIEY6XHRzb3VuZC9zb2MvY29kZWNzL3J0KlxuIFxuK1JFQUxURUsgUFNFIE1DVSBEUklWRVJcbitNOlx0Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuK1xuIFJFQUxURUsgT1RUTyBXQVRDSERPR1xuIE06XHRTYW5kZXIgVmFuaGV1bGUgXHUwMDNjc2FuZGVyQHN2YW5oZXVsZS5uZXRcdTAwM2VcbiBMOlx0bGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuaW5kZXggN2VmMjk2NTdlZTVkZDEuLmEwZjJhZTY2OGM2N2M4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuIFxuIGlmIFBTRV9DT05UUk9MTEVSXG4gXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVVxuK1x0dHJpc3RhdGVcbitcdGhlbHBcbitcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzIHNlbGVjdGVkXG4rXHQgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4rXHR0cmlzdGF0ZSBcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCJcbitcdGRlcGVuZHMgb24gSTJDXG4rXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4rXHRoZWxwXG4rXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4rXHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxuK1x0ICB2aWEgSTJDL1NNQnVzLiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsXG4rXHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXG4rXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfVUFSVFxuK1x0dHJpc3RhdGUgXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcIlxuK1x0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xuK1x0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuK1x0aGVscFxuK1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuK1x0ICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWRcbitcdCAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFXG4rXHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbitcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LlxuK1xuIGNvbmZpZyBQU0VfUkVHVUxBVE9SXG4gXHR0cmlzdGF0ZSBcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwiXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG5pbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuQEAgLTMsNiArMyw5IEBAXG4gXG4gb2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXG4gXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVSkgKz0gcmVhbHRlay1wc2UtbWN1LWNvcmUub1xuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSArPSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX1VBUlQpICs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgKz0gcHNlX3JlZ3VsYXRvci5vXG4gb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSArPSBwZDY5MngwLm9cbiBvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgyMDRjYjQzMGZmZWE4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xuQEAgLTAsMCArMSw5ODkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXNcbisgKiBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMuIFRoZSBNQ1Ugc3BlYWtzIGEgMTItYnl0ZSBmaXhlZC1mcmFtZVxuKyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlXG4rICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLlxuKyAqXG4rICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGVcbisgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yXG4rICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVXG4rICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbC4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3RcbisgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxuKyAqXG4rICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLlxuKyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmVcbisgKiB0aGUgTUNVIGZyb250cyBhbmQgbWFuYWdlcyBCcm9hZGNvbSBQU0Ugc2lsaWNvbjsgR2VuMiBiZWluZyB1c2VkIHdpdGhcbisgKiBSZWFsdGVrIFBTRSBzaWxpY29uLiBUaGUgdHdvIHNoYXJlIGZyYW1lIGZvcm1hdCBhbmQgYSBzdW0tbW9kLTI1NlxuKyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzO1xuKyAqIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuXG4rICpcbisgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcbisgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sXG4rICogZmFtaWx5LCBhbmQgXCJkdW1iIFBTRVwiIG1vZGVzIHdoZXJlIG5vIGhvc3QgY29udHJvbCBpcyB3aXJlZCB1cCBhdCBhbGwuXG4rICpcbisgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1VcbisgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlc1xuKyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2XG4rICogY2FsbGJhY2tzLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJyZWFsdGVrLXBzZS1tY3UuaFwiXG4rXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCXHRcdDB4MDEzOFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5XHRcdDB4MDAzOVxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5Q1x0XHQweDAxMzlcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTFcdFx0MHhlMTExXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxXHRcdDB4ZTEyMVxuK1xuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEXHRcdDB4MDBcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkdcdFx0MHgwMVxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcdFx0MHgwMlxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1RcdFx0XHQweDAzXHQvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVFx0XHQweDA0XG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFRcdFx0MHgwNVx0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1x0XHQweDA2XG4rXG4rLyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVJcdDB4MDJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NQVhfUE9SVFNcdFx0XHQ0OFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXHRcdDNcbitcbitlbnVtIHJ0cHNlX21jdV9jbWQge1xuK1x0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxuK1x0UlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sXG4rXHRSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLFxuK1xuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVUyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFMsXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJRyxcbitcbitcdFJUUFNFX01DVV9OVU1fQ01EUyxcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIHtcbitcdHU4IG9wO1xuK1x0Ym9vbCB2YWxpZDtcbit9O1xuK1xuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKVx0eyAub3AgPSAob3BjKSwgLnZhbGlkID0gdHJ1ZSB9XG4rXG4rLyogUGFyc2VkIE1DVSByZXNwb25zZSBzdHJ1Y3R1cmVzIChkZWNvZGVkIGZyb20gcnRwc2VfbWN1X21zZyByZXBsaWVzKSAqL1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XG4rXHR1OCBtYXhfcG9ydHM7XG4rXHRib29sIHN5c3RlbV9lbmFibGU7XG4rXHR1MTYgZGV2aWNlX2lkO1xuK1x0dTggc3dfdmVyO1xuK1x0dTggbWN1X3R5cGU7XG4rXHR1OCBjb25maWdfc3RhdHVzO1xuK1x0dTggZXh0X3Zlcjtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7XG4rXHR1OCB1dmxvO1xuK1x0dTggb3ZsbztcbitcdGJvb2wgcHJlYWxsb2NfZW5hYmxlO1xuK1x0dTggbnVtX29mX3BzZXM7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHtcbitcdHU4IHN0czE7XG4rXHR1OCBzdHMyO1xuK1x0dTggc3RzMztcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7XG4rXHR1MTYgdm9sdGFnZV9yYXc7XHQvKiA2NC40NW1WL0xTQiAqL1xuK1x0dTE2IGN1cnJlbnRfcmF3O1x0LyogMW1BL0xTQiAqL1xuK1x0dTE2IHRlbXBlcmF0dXJlX3JhdztcdC8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovXG4rXHR1MTYgcG93ZXJfcmF3O1x0XHQvKiAxMDBtVy9MU0IgKi9cbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcge1xuK1x0Ym9vbCBlbmFibGU7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyB7XG4rXHR1OCBtYXhfcG93ZXI7XG4rXHR1OCBwcmlvcml0eTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCB7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSBvcGNvZGVbUlRQU0VfTUNVX05VTV9DTURTXTtcbitcbitcdC8qXG4rXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcbitcdCAqIGRpYWxlY3Qgc3VwcGxpZXMgaXRzIG93bi4gT3RoZXIgcmVzcG9uc2VzIHNoYXJlIG9uZSBsYXlvdXQgYW5kIGFyZVxuK1x0ICogZGVjb2RlZCBkaXJlY3RseSAtIGEgZGlhbGVjdCB0aGF0IGRpdmVyZ2VzIHRoZXJlIG11c3QgYWRkIGEgaG9vayxcbitcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cbitcdCAqL1xuK1x0dm9pZCAoKnBhcnNlX3N5c3RlbV9pbmZvKShjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKTtcbitcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XG4rXHRjb25zdCBjaGFyICooKm1jdV90eXBlX3N0cikodW5zaWduZWQgaW50IG1jdV90eXBlKTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHR1MTYgZGV2aWNlX2lkO1xuK1x0dTMyIG1heF9tV19wZXJfcG9ydDtcbitcdGVudW0gcnRwc2VfbWN1X2NtZCBwd19zZXRfY21kO1x0LyogY29tbWFuZCB1c2VkIGJ5IHNldF9wd19saW1pdCAqL1xuK1x0dTMyIHB3X3NldF9sc2JfbVc7XHRcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xuK1x0dTMyIHB3X3JlYWRfbHNiX21XO1x0XHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XG4rXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QixcbitcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbitcdC5uYW1lID0gXCJSVEw4MjM4QlwiLFxuK1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuK1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuK1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcbitcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcbitcdC5uYW1lID0gXCJSVEw4MjM5XCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuK1x0Lm5hbWUgPSBcIlJUTDgyMzlDXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuK1x0Lm5hbWUgPSBcIkJDTTU5MTExXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXG4rXHQvKlxuK1x0ICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXRcbitcdCAqIGFuZCB0aGUgR2VuMSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kIChcdTAwM2M9NTFXKTtcbitcdCAqIGNhcCBhdCB0aGUgMzBXIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBvZmZlcnMuXG4rXHQgKi9cbitcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbitcdC5uYW1lID0gXCJCQ001OTEyMVwiLFxuK1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuK1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuK1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4rfTtcbitcbisvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi9cbitcbitzdGF0aWMgc3RydWN0IHJ0cHNlX21jdV9jdHJsICp0b19ydHBzZV9tY3VfY3RybChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldilcbit7XG4rXHRyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwsIHBjZGV2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X21zZ19pbml0KHN0cnVjdCBydHBzZV9tY3VfbXNnICptc2csIHU4IG9wY29kZSlcbit7XG4rXHRtZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpO1xuK1x0bXNnLVx1MDAzZW9wY29kZSA9IG9wY29kZTtcbit9XG4rXG4rc3RhdGljIHU4IHJ0cHNlX21jdV9jaGVja3N1bShjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdHU4IHN1bSA9IDA7XG4rXG4rXHR3aGlsZSAobGVuLS0pXG4rXHRcdHN1bSArPSAqYnVmKys7XG4rXHRyZXR1cm4gc3VtO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0aW50IHJldDtcbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KSB7XG4rXHRcdC8qIFJvbGxpbmcgc2VxX251bSBzbyBhIGxhdGUgcmVwbHkgY2FuJ3QgcGFzcyBhcyBhIGxhdGVyIG9uZS4gKi9cbitcdFx0cmVxLVx1MDAzZXNlcV9udW0gPSBwc2UtXHUwMDNlc2VxKys7XG4rXHRcdHJlcS1cdTAwM2VjaGVja3N1bSA9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpO1xuK1xuK1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXNlbmQocHNlLCByZXEpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBNQ1UgbmVlZHMgYSBmaXhlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHJlY2VpdmluZyBhIHJlcXVlc3RcbitcdFx0ICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG9cbitcdFx0ICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3ZcbitcdFx0ICogcGF0aCBzaW1wbGU6IGEgc2luZ2xlIGJvdW5kZWQgd2FpdCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRtc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTtcbitcbitcdFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xuK1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXJlY3YocHNlLCByZXEsIHJlc3ApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IGhhcm1sZXNzXG4rXHQgKiB0byBjaGVjayBmb3IgR2VuMiB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQ1xuK1x0ICogbWlzbWF0Y2ggcGF0aCBzbyBjYWxsZXJzIHNlZSBhIG1lYW5pbmdmdWwgZXJybm8uXG4rXHQgKi9cbitcdHN3aXRjaCAocmVzcC1cdTAwM2VvcGNvZGUpIHtcbitcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFOlxuK1x0XHRyZXR1cm4gLUVCQURFO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOlxuK1x0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcbitcdGlmIChyZXNwLVx1MDAzZW9wY29kZSAhPSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4rXHQgICAgcmVzcC1cdTAwM2VzZXFfbnVtICE9IHJlcS1cdTAwM2VzZXFfbnVtIHx8XG4rXHQgICAgcmVzcC1cdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXG4rXHRcdHJldHVybiAtRUJBRE1TRztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxuK1x0XHRcdFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xuK1x0aW50IHJldDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4rXHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgcmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJlc3AtXHUwMDNlcGF5bG9hZFswXSAhPSBwb3J0KVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuK1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuK1x0cmVxLnBheWxvYWRbMV0gPSBhcmc7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJlc3AucGF5bG9hZFswXSAhPSBwb3J0IHx8IHJlc3AucGF5bG9hZFsxXSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBHbG9iYWwgb3BlcmF0aW9ucyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9pbmZvKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnICpjb25maWcpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbitcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRjb25maWctXHUwMDNldXZsbyA9IHJlc3AucGF5bG9hZFswXTtcbitcdGNvbmZpZy1cdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xuK1x0Y29uZmlnLVx1MDAzZXByZWFsbG9jX2VuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMHgxKTtcbitcdGNvbmZpZy1cdTAwM2VudW1fb2ZfcHNlcyA9IHJlc3AucGF5bG9hZFs2XTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XG4rfVxuK1xuKy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdGF0dXMtXHUwMDNlc3RzMSA9IHJlc3AucGF5bG9hZFsxXTtcbitcdHN0YXR1cy1cdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xuK1x0c3RhdHVzLVx1MDAzZXN0czMgPSByZXNwLnBheWxvYWRbM107XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRtZWFzdXJlbWVudC1cdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNlY3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzNdKTtcbitcdG1lYXN1cmVtZW50LVx1MDAzZXRlbXBlcmF0dXJlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbNV0pO1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGNvbmZpZy1cdTAwM2VlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Y29uZmlnLVx1MDAzZW1heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTtcbitcdGNvbmZpZy1cdTAwM2Vwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV07XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcbit9XG4rXG4rLyogUFNFIGNvbnRyb2xsZXIgb3BzICovXG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRhZG1pbl9zdGF0ZS1cdTAwM2VjMzNfYWRtaW5fc3RhdGUgPSBjb25maWcuZW5hYmxlID8gRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQgOlxuK1x0XHRcdFx0XHRcdCAgICAgICBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4rXHRcdFx0XHRcdHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ERUxJVkVSSU5HO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1RFU1Q7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19PVEhFUkZBVUxUO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1VOS05PV047XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LypcbitcdCAqIHN0czIgaG9sZHMgdGhlIGNsYXNzIG9ubHkgaW4gdGhlIG9wZXJhdGlvbmFsIHN0YXRlcyBiZWxvdy4gSW4gYVxuK1x0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XG4rXHQgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpc1xuK1x0ICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHJlYWwgY2xhc3MtMCBQRDsgdXNlcnNwYWNlIGRpc2FtYmlndWF0ZXNcbitcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxuK1x0ICovXG4rXHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuK1x0XHRyZXR1cm4gcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyhcdTAwMjZzdGF0dXMpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcdTAwMjZtZWFzdXJlbWVudCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogMTAwbVcgcGVyIExTQiAqL1xuK1x0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbitcdGludCByZXQ7XG4rXHR1MzIgdVY7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDY0LjQ1bVYgcGVyIExTQiAqL1xuK1x0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcbitcdHJldHVybiBtaW5fdCh1MzIsIHVWLCBJTlRfTUFYKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVx1MDAzZWNoaXAtXHUwMDNlcHdfcmVhZF9sc2JfbVc7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXAgPSBwc2UtXHUwMDNlY2hpcDtcbitcdHU4IHByZ192YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKG1heF9tVyBcdTAwM2MgMCB8fCBtYXhfbVcgXHUwMDNlIGNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0KVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdHR5cGVfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07XG4rXHR2YWxfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW2NoaXAtXHUwMDNlcHdfc2V0X2NtZF07XG4rXHQvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovXG4rXHRpZiAoIXR5cGVfb3BjLVx1MDAzZXZhbGlkIHx8ICF2YWxfb3BjLVx1MDAzZXZhbGlkIHx8ICFjaGlwLVx1MDAzZXB3X3NldF9sc2JfbVcpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcbitcdCAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpblxuK1x0ICogdXNlci1kZWZpbmVkIG1vZGUgYnV0IHdpdGggdGhlIHByZXZpb3VzIGxpbWl0IHZhbHVlOyB0aGUgbmV4dFxuK1x0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cbitcdCAqL1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHR5cGVfb3BjLVx1MDAzZW9wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdmFsX29wYy1cdTAwM2VvcCwgcHJnX3ZhbCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XG4rXG4rXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJhbmdlWzBdLm1pbiA9IDA7XG4rXHRyYW5nZVswXS5tYXggPSBwc2UtXHUwMDNlY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQ7XG4rXG4rXHRvdXQtXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBjb25maWcucHJpb3JpdHk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1xuK1x0aWYgKHByaW8gXHUwMDNlIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCBvcGMtXHUwMDNlb3AsIHByaW8pO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0ge1xuK1x0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcbitcdC5waV9nZXRfcHdfc3RhdHVzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyxcbitcdC5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsXG4rXHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXG4rXHQucGlfZW5hYmxlID0gcnRwc2VfbWN1X3BvcnRfZW5hYmxlLFxuK1x0LnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLFxuK1x0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXG4rXHQucGlfZ2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0LFxuK1x0LnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCxcbitcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcbitcdC5waV9nZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvLFxuK1x0LnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnO1xuK1x0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXG4rXHQgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGFcbitcdCAqIGNvcnJ1cHQvcGFydGlhbCBmcmFtZSAoLUVCQURNU0cgLyAtRUJBREUpLiBSZXRyeSB0aG9zZSB3aXRoaW4gYVxuK1x0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXG4rXHQgKiBpbW1lZGlhdGVseS5cbitcdCAqL1xuK1x0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTtcbitcdGRvIHtcbitcdFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XG4rXHRcdGlmIChyZXQgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTlhJTyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FUkVNT1RFSU8gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQkFETVNHIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVCQURFKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRtc2xlZXAoUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMpO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCJmYWlsZWQgdG8gcmVhZCBNQ1UgaW5mb1xcblwiKTtcbitcbitcdHN3aXRjaCAoaW5mby1cdTAwM2VkZXZpY2VfaWQpIHtcbitcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcbitcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM4Yl9pbmZvO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzlfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOWNfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMTFfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMjFfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLCBcInVua25vd24gUFNFIGlkIDB4JXhcXG5cIixcbitcdFx0XHRcdCAgICAgaW5mby1cdTAwM2VkZXZpY2VfaWQpO1xuK1x0fVxuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZW1heF9wb3J0cyB8fCBpbmZvLVx1MDAzZW1heF9wb3J0cyBcdTAwM2UgUlRQU0VfTUNVX01BWF9QT1JUUylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICAgXCJNQ1UgcmVwb3J0cyBpbnZhbGlkIHBvcnQgY291bnQgJXVcXG5cIiwgaW5mby1cdTAwM2VtYXhfcG9ydHMpO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgXHUwMDI2ZXh0X2NvbmZpZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwiZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcXG5cIik7XG4rXG4rXHRkZXZfaW5mbyhwc2UtXHUwMDNlZGV2LCBcIiVzIE1DVSwgJXMgKGlkIDB4JTA0eCksICV1IHBvcnRzIGFjcm9zcyAldSBQU0UgY2hpcChzKVxcblwiLFxuK1x0XHQgcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKGluZm8tXHUwMDNlbWN1X3R5cGUpLCBwc2UtXHUwMDNlY2hpcC1cdTAwM2VuYW1lLFxuK1x0XHQgaW5mby1cdTAwM2VkZXZpY2VfaWQsIGluZm8tXHUwMDNlbWF4X3BvcnRzLCBleHRfY29uZmlnLm51bV9vZl9wc2VzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IGRhdGE7XG4rXG4rXHRydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIGZhbHNlKTtcbit9XG4rXG4raW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9pbmZvIGluZm87XG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDtcbitcdGludCByZXQ7XG4rXG4rXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBydHBzZV9tY3VfbXNnKSAhPSBSVFBTRV9NQ1VfTVNHX1NJWkUpO1xuK1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KHBzZS1cdTAwM2VkZXYsIFx1MDAyNnBzZS1cdTAwM2VtdXRleCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEocHNlLVx1MDAzZWRldik7XG4rXHRpZiAoIW1hdGNoKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRU5PREVWLCBcIm1pc3NpbmcgbWF0Y2ggZGF0YVxcblwiKTtcbitcdHBzZS1cdTAwM2VkaWFsZWN0ID0gbWF0Y2gtXHUwMDNlZGlhbGVjdDtcbitcbitcdC8qXG4rXHQgKiBDYXRjaCBhIGRpYWxlY3QgdGhhdCBmb3Jnb3QgdG8gc2V0IG9uZSBvZiB0aGUgcmVxdWlyZWQgaG9va3MgYXRcbitcdCAqIHByb2JlIHRpbWUsIHJhdGhlciB0aGFuIE5VTEwtZGVyZWYnaW5nIGxhdGVyIGZyb20gYSBmYXN0IHBhdGguXG4rXHQgKi9cbitcdGlmICghcHNlLVx1MDAzZWRpYWxlY3QgfHxcbitcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8gfHxcbitcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyB8fFxuK1x0ICAgICFwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VtY3VfdHlwZV9zdHIpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgIFwiZGlhbGVjdCBmb3IgY2hpcCBpcyBpbmNvbXBsZXRlXFxuXCIpO1xuK1xuK1x0LypcbitcdCAqIFJlbGVhc2UgdGhlIE1DVSBmcm9tIHJlc2V0IGJlZm9yZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb247IHRoZVxuK1x0ICogYm9vdC1yZXRyeSBsb29wIGluIGRpc2NvdmVyKCkgd2FpdHMgZm9yIGl0IHRvIGFuc3dlci5cbitcdCAqL1xuK1x0Z3Bpb2QgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXHUwMDNlZGV2LCBcInJlc2V0XCIsIEdQSU9EX09VVF9MT1cpO1xuK1x0aWYgKElTX0VSUihncGlvZCkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIoZ3Bpb2QpLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgcmVzZXQgZ3Bpb1xcblwiKTtcbitcbitcdC8qXG4rXHQgKiBTb21lIGJvYXJkcyBnYXRlIGFsbCBwb3J0cyB0aHJvdWdoIGEgaGFyZHdhcmUgbGluZTsgZGVhc3NlcnQgaXQgc29cbitcdCAqIHRoZSBNQ1UgcHJvdG9jb2wgZ292ZXJucyBwZXItcG9ydCBhZG1pbiBzdGF0ZSBmcm9tIGhlcmUgb24uXG4rXHQgKi9cbitcdGdwaW9kID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLVx1MDAzZWRldiwgXCJkaXNhYmxlLXBvcnRzXCIsIEdQSU9EX09VVF9MT1cpO1xuK1x0aWYgKElTX0VSUihncGlvZCkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIoZ3Bpb2QpLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgZGlzYWJsZS1wb3J0cyBncGlvXFxuXCIpO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2Rpc2NvdmVyKHBzZSwgXHUwMDI2aW5mbyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKCFpbmZvLnN5c3RlbV9lbmFibGUpIHtcbitcdFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcbitcdFx0LyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEdlbjEpIHJldHVyblxuK1x0XHQgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyBcIm5vIHNlcGFyYXRlIGVuYWJsZSByZXF1aXJlZFwiLlxuK1x0XHQgKi9cbitcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBlbmFibGUgUFNFIHN5c3RlbVxcblwiKTtcbitcdFx0aWYgKCFyZXQpIHtcbitcdFx0XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHQgICAgICAgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlLCBwc2UpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50XG4rXHQgKiBmb3IgZXZlcnkgYm9hcmQpLCBpdCBpc24ndCBrbm93biB3aGV0aGVyIHRoZSBQb0Ugc3Vic3lzdGVtIGlzIGFjdGl2ZSBvclxuK1x0ICogaW5hY3RpdmUgYnkgZGVmYXVsdC4gQXQgdGhpcyBzdGFnZSwgdGhlIFBTRSBjaGlwcyBtaWdodCBhbHJlYWR5IGRlbGl2ZXJcbitcdCAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuXG4rXHQgKi9cbitcbitcdC8qIHBjZGV2Lm93bmVyIGlzIHNldCBieSB0aGUgdHJhbnNwb3J0LCBzbyB0aGUgcmVnaXN0ZXJlZCBjb250cm9sbGVyXG4rXHQgKiBwaW5zIHRoZSB0cmFuc3BvcnQgbW9kdWxlIHRoYXQgb3ducyB0aGUgbGl2ZSBkZXZpY2UsIG5vdCB0aGUgY29yZS5cbitcdCAqL1xuK1x0cHNlLVx1MDAzZXBjZGV2Lm9wcyAgICAgID0gXHUwMDI2cnRwc2VfbWN1X29wcztcbitcdHBzZS1cdTAwM2VwY2Rldi5kZXYgICAgICA9IHBzZS1cdTAwM2VkZXY7XG4rXHRwc2UtXHUwMDNlcGNkZXYudHlwZXMgICAgPSBFVEhUT09MX1BTRV9DMzM7XG4rXHRwc2UtXHUwMDNlcGNkZXYubnJfbGluZXMgPSBpbmZvLm1heF9wb3J0cztcbitcdHBzZS1cdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFk7XG4rXHRwc2UtXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUM7XG4rXG4rXHRyZXR1cm4gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcihwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlcGNkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcmVnaXN0ZXIpO1xuK1xuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4re1xuK1x0aW5mby1cdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xuK1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gKHBheWxvYWRbMl0gPT0gMHgxKTtcbitcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuK1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuK1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4rXHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuK1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHQvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovXG4rXHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cdTAwM2VzdHMyKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXG4re1xuK1x0c3dpdGNoIChtY3VfdHlwZSkge1xuK1x0Y2FzZSAweDAwOlx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRjMxMFwiO1xuK1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRjIzMFwiO1xuK1x0Y2FzZSAweDAyOlx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRjMwM1wiO1xuK1x0Y2FzZSAweDAzOlx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRjEwM1wiO1xuK1x0Y2FzZSAweDA0Olx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRTEwM1wiO1xuK1x0Y2FzZSAweDEwOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDUxNlwiO1xuK1x0Y2FzZSAweDExOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDU2NFwiO1xuK1x0Y2FzZSAweDEyOlx0cmV0dXJuIFwiTnV2b3RvbiBOVUMwMjlcIjtcbitcdGRlZmF1bHQ6XHRyZXR1cm4gXCJ1bmtub3duXCI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4re1xuK1x0aW5mby1cdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xuK1x0LyogR2VuMSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlXG4rXHQgKiBcInJlbW90ZSBlbmFibGVcIiBiaXQgaW4gdGhlIHN5c3RlbS1zdGF0dXMgZmxhZ3MgYXQgcGF5bG9hZFs3XS5cbitcdCAqL1xuK1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcdTAwMjYgQklUKDIpKTtcbitcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuK1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuK1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4rXHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuK1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHQvKiBHZW4xIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LlxuK1x0ICogTWFzayB0byB0aGUgbG93IG5pYmJsZTsgY2xhc3MgaXMgMC4uOCBhbmQgYW55IGhpZ2ggYml0cyB3b3VsZCBiZVxuK1x0ICogbm9pc2UuXG4rXHQgKi9cbitcdHJldHVybiBzdGF0dXMtXHUwMDNlc3RzMyBcdTAwMjYgMHgwZjtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4xX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXG4re1xuK1x0c3dpdGNoIChtY3VfdHlwZSkge1xuK1x0Y2FzZSAweDAwOlx0cmV0dXJuIFwiU1QgTWljcm8gU1QzMkYxMDBcIjtcbitcdGNhc2UgMHgwMTpcdHJldHVybiBcIk51dm90b24gTTA1eHggTEFOXCI7XG4rXHRjYXNlIDB4MDI6XHRyZXR1cm4gXCJTVCBNaWNybyBTVEYwMzBDOFwiO1xuK1x0Y2FzZSAweDAzOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDU4U0FOXCI7XG4rXHRjYXNlIDB4MDQ6XHRyZXR1cm4gXCJOdXZvdG9uIE5VQzEyMlwiO1xuK1x0ZGVmYXVsdDpcdHJldHVybiBcInVua25vd25cIjtcbitcdH1cbit9XG4rXG4rLyogTWFwIGVhY2ggbG9naWNhbCBjb21tYW5kIHRoZSBjb3JlIGlzc3VlcyB0byBpdHMgcGVyLWRpYWxlY3Qgb3Bjb2RlLiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiA9IHtcbitcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvLFxuK1x0LnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyxcbitcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cixcbitcdC5vcGNvZGUgPSB7XG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdXHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4NGEpLFxuK1xuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTIpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cdD0gUlRQU0VfTUNVX09QKDB4MTMpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cdD0gUlRQU0VfTUNVX09QKDB4MTUpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4NDIpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cdD0gUlRQU0VfTUNVX09QKDB4NDQpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4NDgpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHg0OSksXG4rXHR9LFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0ge1xuK1x0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X2dlbjFfcGFyc2Vfc3lzdGVtX2luZm8sXG4rXHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzLFxuK1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLFxuK1x0Lm9wY29kZSA9IHtcbitcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDIwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxuK1xuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cdD0gUlRQU0VfTUNVX09QKDB4MTYpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cdD0gUlRQU0VfTUNVX09QKDB4MWEpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4MjEpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cdD0gUlRQU0VfTUNVX09QKDB4MzApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MjUpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHgyNiksXG4rXHR9LFxuK307XG4rXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGEgPSB7XG4rXHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjEsXG4rfTtcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMV9kYXRhKTtcbitcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YSA9IHtcbitcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMixcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2RhdGEpO1xuK1xuKy8qIFNhbWUgZGlhbGVjdCBhcyBnZW4yLCBidXQgdGhlIE1DVSBleHBlY3RzIHJhdy1JMkMgZnJhbWluZy4gKi9cbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgPSB7XG4rXHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXG4rXHQubmF0aXZlX2kyYyA9IHRydWUsXG4rfTtcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YSk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoY29yZSlcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTEwZjhjNjMzYjY4ZWNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcbkBAIC0wLDAgKzEsMTcwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwicmVhbHRlay1wc2UtbWN1LmhcIlxuK1xuKy8qXG4rICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc29cbisgKiB0aGUgcmVzcG9uc2UgaXMgbm9ybWFsbHkgcmVhZHkgb24gdGhlIHZlcnkgZmlyc3QgcmVhZC4gRm9yIGNvbW1hbmRzIHRoZVxuKyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbisgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLlxuKyAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX01BWF9UUklFU1x0KFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMgLyBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1xuK1x0LyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqL1xuK1x0cmV0dXJuIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlcS1cdTAwM2VvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsXG4rXHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSArIDEpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXHUwMDNlZGV2KTtcbitcdGludCB0cmllcywgcmV0O1xuK1xuK1x0Zm9yICh0cmllcyA9IDA7IHRyaWVzIFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xuK1x0XHRpZiAodHJpZXMgXHUwMDNlIDApXG4rXHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuK1xuK1x0XHQvKiBNQ1UgbmVlZHMgMHgwMCBhcyBjb21tYW5kIGJ5dGUgZm9yIHJlYWQgKi9cbitcdFx0cmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLFxuK1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4rXHRcdFx0XHRcdFx0ICAgICh1OCAqKXJlc3ApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFx1MDAyNlx1MDAyNiBydHBzZV9tY3VfcmVzcF9pc19maW5hbChyZXEsIHJlc3ApKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FVElNRURPVVQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19zbWJ1c19vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbitcdC5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IHJldDtcbitcbitcdC8qIGkyY19tYXN0ZXJfc2VuZCgpIG1heSBETUEsIHNvIHRoZSBidWZmZXIgbXVzdCBub3QgYmUgb24gdGhlIHN0YWNrLiAqL1xuK1x0YnVmID0ga21lbWR1cChyZXEsIFJUUFNFX01DVV9NU0dfU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJ1ZilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXHRrZnJlZShidWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldHVybiByZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFID8gMCA6IC1FSU87XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4rXHRpbnQgdHJpZXMsIHJldDtcbitcdHU4ICpidWY7XG4rXG4rXHQvKiBpMmNfbWFzdGVyX3JlY3YoKSBtYXkgRE1BLCBzbyByZWFkIGludG8gYW4gb2ZmLXN0YWNrIGJ1ZmZlci4gKi9cbitcdGJ1ZiA9IGttYWxsb2MoUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzKyspIHtcbitcdFx0aWYgKHRyaWVzIFx1MDAzZSAwKVxuK1x0XHRcdG1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTtcbitcbitcdFx0cmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSkge1xuK1x0XHRcdG1lbWNweShyZXNwLCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXHRcdFx0aWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHtcbitcdFx0XHRcdHJldCA9IDA7XG4rXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcdHJldCA9IC1FVElNRURPVVQ7XG4rb3V0OlxuK1x0a2ZyZWUoYnVmKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzID0ge1xuK1x0LnNlbmQgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kLFxuK1x0LnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2Y2xpZW50LVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcbitcdGJvb2wgdXNlX25hdGl2ZTtcbitcbitcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4rXHRpZiAoIW1hdGNoKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFwibWlzc2luZyBtYXRjaCBkYXRhXFxuXCIpO1xuK1xuK1x0LyogVGhlIGZyYW1pbmcgKHJhdyBJMkMgdnMgU01CdXMpIGlzIGNhcnJpZWQgYnkgdGhlIG1hdGNoIGRhdGEuICovXG4rXHR1c2VfbmF0aXZlID0gbWF0Y2gtXHUwMDNlbmF0aXZlX2kyYztcbitcdGlmICh1c2VfbmF0aXZlKSB7XG4rXHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcbitcdFx0XHRcdFwicGxhaW4tSTJDIE1DVSBwcm90b2NvbCByZXF1aXJlcyBJMkMtY2FwYWJsZSBhZGFwdGVyXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXHUwMDNlYWRhcHRlcixcbitcdFx0XHRcdFx0ICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfFxuK1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuK1x0XHRcdFx0XCJTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcXG5cIik7XG4rXHR9XG4rXG4rXHRwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwc2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cHNlLVx1MDAzZWRldiA9IGRldjtcbitcdHBzZS1cdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0cHNlLVx1MDAzZXRyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyBcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcdTAwMjZydHBzZV9tY3VfaTJjX3NtYnVzX29wcztcbitcbitcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LWdlbjEtc21idXNcIiwgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfZ2VuMV9kYXRhIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1wiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4yX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1wiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4yX2kyY19kYXRhIH0sXG4rXHR7IC8qIHNlbnRpbmVsICovIH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBydHBzZV9tY3VfaTJjX2RyaXZlciA9IHtcbitcdC5kcml2ZXIgPSB7XG4rXHRcdC5uYW1lXHRcdD0gXCJyZWFsdGVrLXBzZS1tY3UtaTJjXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZVx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxuK1x0fSxcbitcdC5wcm9iZVx0XHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXG4rfTtcbittb2R1bGVfaTJjX2RyaXZlcihydHBzZV9tY3VfaTJjX2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YmFhMTdkOGQzMWZhMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcbkBAIC0wLDAgKzEsMTY0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXJkZXYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwicmVhbHRlay1wc2UtbWN1LmhcIlxuK1xuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUXHQxOTIwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVFx0bXNlY3NfdG9famlmZmllcygxMDApXG4rI2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXG4rXG4rc3RydWN0IHJ0cHNlX21jdV91YXJ0IHtcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCBwc2U7XG4rXHRzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2O1xuK1x0c3RydWN0IGNvbXBsZXRpb24gcnhfZG9uZTtcbitcdHNwaW5sb2NrX3QgcnhfbG9jaztcdFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cbitcdHNpemVfdCByeF9sZW47XG4rXHR1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTtcbit9O1xuK1xuKyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSlcbitcbisvKlxuKyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlblxuKyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50XG4rICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZFxuKyAqIGludG8gdGhlIG5leHQgZnJhbWUuXG4rICovXG4rc3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHNlcmRldl9kZXZpY2VfZ2V0X2RydmRhdGEoc2VyZGV2KTtcbitcdHNpemVfdCB0YWtlO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4rXHRcdHRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtXHUwMDNlcnhfYnVmKSAtIGN0eC1cdTAwM2VyeF9sZW4pO1xuK1x0XHRpZiAodGFrZSkge1xuK1x0XHRcdG1lbWNweShjdHgtXHUwMDNlcnhfYnVmICsgY3R4LVx1MDAzZXJ4X2xlbiwgYnVmLCB0YWtlKTtcbitcdFx0XHRjdHgtXHUwMDNlcnhfbGVuICs9IHRha2U7XG4rXHRcdFx0aWYgKGN0eC1cdTAwM2VyeF9sZW4gPT0gc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpKVxuK1x0XHRcdFx0Y29tcGxldGUoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBjb25zdW1lIGFsbCB0byBhdm9pZCBkZXN5bmMvbWlzYWxpZ25tZW50ICovXG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgcnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyA9IHtcbitcdC5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsXG4rXHQud3JpdGVfd2FrZXVwID0gc2VyZGV2X2RldmljZV93cml0ZV93YWtldXAsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuK1x0aW50IHdyaXR0ZW47XG4rXG4rXHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4rXHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbitcdFx0Y3R4LVx1MDAzZXJ4X2xlbiA9IDA7XG4rXHR9XG4rXG4rXHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXHUwMDNlc2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSxcbitcdFx0XHRcdCAgICAgIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQpO1xuK1x0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4rXHRcdHJldHVybiB3cml0dGVuO1xuK1x0aWYgKHdyaXR0ZW4gIT0gc2l6ZW9mKCpyZXEpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcbitcbitcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSlcbitcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4rXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbitcdFx0aWYgKGN0eC1cdTAwM2VyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSlcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcbitcdFx0bWVtY3B5KHJlc3AsIGN0eC1cdTAwM2VyeF9idWYsIHNpemVvZigqcmVzcCkpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcyA9IHtcbitcdC5zZW5kID0gcnRwc2VfbWN1X3VhcnRfc2VuZCxcbitcdC5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdixcbit9O1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbit7XG4rXHR1MzIgc3BlZWQgPSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQ7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzZXJkZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHg7XG4rXHR1bnNpZ25lZCBpbnQgYmF1ZDtcbitcdGludCByZXQ7XG4rXG4rXHRjdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjdHgpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y3R4LVx1MDAzZXNlcmRldiA9IHNlcmRldjtcbitcdGN0eC1cdTAwM2Vwc2UuZGV2ID0gZGV2O1xuK1x0Y3R4LVx1MDAzZXBzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0Y3R4LVx1MDAzZXBzZS50cmFuc3BvcnQgPSBcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKTtcbitcbitcdHNlcmRldl9kZXZpY2Vfc2V0X2RydmRhdGEoc2VyZGV2LCBjdHgpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsIFx1MDAyNnJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpO1xuK1xuK1x0cmV0ID0gZGV2bV9zZXJkZXZfZGV2aWNlX29wZW4oZGV2LCBzZXJkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIG9wZW4gc2VyZGV2XFxuXCIpO1xuK1xuK1x0Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgXCJjdXJyZW50LXNwZWVkXCIsIFx1MDAyNnNwZWVkKTtcbitcbitcdGJhdWQgPSBzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIHNwZWVkKTtcbitcdGlmIChiYXVkICE9IHNwZWVkKVxuK1x0XHRkZXZfd2FybihkZXYsIFwiY291bGQgbm90IHNldCBiYXVkcmF0ZSAldSwgY29udHJvbGxlciB1c2VzICV1XFxuXCIsXG4rXHRcdFx0IHNwZWVkLCBiYXVkKTtcbitcbitcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChzZXJkZXYsIGZhbHNlKTtcbitcbitcdHJldCA9IHNlcmRldl9kZXZpY2Vfc2V0X3Bhcml0eShzZXJkZXYsIFNFUkRFVl9QQVJJVFlfTk9ORSk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfd2FybihkZXYsIFwiY291bGQgbm90IHNldCBwYXJpdHkgdG8gbm9uZTogJWRcXG5cIiwgcmV0KTtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXHUwMDI2Y3R4LVx1MDAzZXBzZSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMVwiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1nZW4yXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuK1x0eyAvKiBzZW50aW5lbCAqLyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7XG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicmVhbHRlay1wc2UtbWN1LXVhcnRcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXG4rXHR9LFxuK1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuK307XG4rbW9kdWxlX3NlcmRldl9kZXZpY2VfZHJpdmVyKHJ0cHNlX21jdV91YXJ0X2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wYTMxOTdjOWM5Y2QxZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICsxLDg5IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbitcbisjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxuKyNkZWZpbmUgX1JFQUxURUtfUFNFX01DVV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisvKlxuKyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuKyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXG4rICogdW5kZXJseWluZyB0cmFuc3BvcnQ6IHRoZSBjb3JlIHBhY2VzIHRyYW5zYWN0aW9ucyBieSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcbisgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4rICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xuKyAqIG5lZWRpbmcgdXAgdG8gfjFzIHRvIHByb2R1Y2UgYSByZXBseS5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1x0XHRcdDI1XG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TXHRcdDEwMDBcbitcbisvKlxuKyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2VcbisgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4rICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcbisgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcdFx0MzAwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVNcdFx0XHQxMDBcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVx0XHRcdDEyXG4rXG4rc3RydWN0IHJ0cHNlX21jdV9tc2cge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggc2VxX251bTtcbitcdHU4IHBheWxvYWRbOV07XG4rXHR1OCBjaGVja3N1bTtcbit9IF9fcGFja2VkO1xuK1xuKy8qXG4rICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IEdlbjIgbmV2ZXIgZW1pdHMgdGhlbSkuXG4rICogSU5DT01QTEVURS9CQURfQ1NVTSBhcmUgdGVybWluYWw7IE5PVF9SRUFEWSBpcyB0cmFuc2llbnQuXG4rICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEVcdFx0MHhmZFx0LyogLUVCQURFICAgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU1cdFx0MHhmZVx0LyogLUVCQURNU0cgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZXHRcdDB4ZmZcdC8qIC1FQUdBSU4gICovXG4rXG4rLyogQSBwb2xsaW5nIHRyYW5zcG9ydCBjYW4gc3RvcCBoZXJlOiB0aGUgbWF0Y2hpbmcgcmVwbHksIG9yIGEgdGVybWluYWwgZXJyb3IuICovXG4rc3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHJldHVybiByZXNwLVx1MDAzZW9wY29kZSA9PSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4rXHQgICAgICAgcmVzcC1cdTAwM2VvcGNvZGUgPT0gUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFIHx8XG4rXHQgICAgICAgcmVzcC1cdTAwM2VvcGNvZGUgPT0gUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTtcbit9XG4rXG4rLyogT3BhcXVlIHRvIHRyYW5zcG9ydHM7IGRlZmluZWQgaW4gcmVhbHRlay1wc2UtY29yZS5jLiAqL1xuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdDtcbitzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbztcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmw7XG4rXG4rLyogUGVyLWNvbXBhdGlibGUgbWF0Y2ggZGF0YSAodGhlIG9mX21hdGNoIC5kYXRhKS4gKi9cbitzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEge1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xuK1x0Ym9vbCBuYXRpdmVfaTJjO1x0LyogcmF3LUkyQyBmcmFtaW5nICh2cyBTTUJ1cyk7IEkyQyB0cmFuc3BvcnQgb25seSAqL1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHtcbitcdGludCAoKnNlbmQpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKTtcbitcdGludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApO1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9jdHJsIHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XG4rXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHNlcmlhbGl6ZXMgTUNVIHJlcXVlc3QvcmVzcG9uc2UgdHJhbnNhY3Rpb25zICovXG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyAqdHJhbnNwb3J0O1xuK1x0dTggc2VxO1x0XHRcdC8qIHJvbGxpbmcgcmVxdWVzdCBzZXFfbnVtLCBlY2hvZWQgYnkgdGhlIE1DVSAqL1xuK307XG4rXG4raW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7XG4rXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YTtcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhO1xuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDE6MTU6MTguNTYwNTgyMTE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NDc2OTMzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgUmVhbHRlayBQU0UgTUNVIERyaXZlcioqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSwgaGFuZGxpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSByZWFjaCBpdCBpbiBRRU1VPyBXZSdyZSBkZWFsaW5nIHdpdGggSTJDIGFuZCBVQVJULCB3aGljaCBjYW4gYmUgZW11bGF0ZWQgb3IgaW5zdGFudGlhdGVkIGluIGEgZmV3IHdheXMuIEkyQywgZm9yIGluc3RhbmNlLCBoYXMgYGkyYy1zdHViYCwgYGkyYy1kZXZgLCBvciBkZXZpY2UgdHJlZSBub2RlcyBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9uLCBvciBzeXprYWxsZXIgaXRzZWxmIGNhbiBpbmplY3QgdHJhZmZpYyBvciBjcmVhdGUgdmlydHVhbCBkZXZpY2VzLiBTeXprYWxsZXIsIHJpZ2h0Li4uIGl0IG1pZ2h0IHVzZSBgL2Rldi9pMmMtWGAsIGJ1dCB0aGlzIGlzIGEgKnNwZWNpZmljKiBrZXJuZWwgZHJpdmVyLiBTbywgY2FuIHdlIHByb2JlIHRoaXMgZHJpdmVyP1xuXG5UaGUgYW5zd2VyIGlzIHllcy4gRGV2aWNlIHRyZWUgbm9kZXMgb3IgSTJDIHN5c2ZzIGBuZXdfZGV2aWNlYCBzaG91bGQgZG8gdGhlIHRyaWNrLiBVQVJULCBiZWluZyBzZXJkZXYsIGFsc28gcmVsaWVzIG9uIGRldmljZSB0cmVlLCB0aG91Z2ggYGxkYXR0YWNoYCBpcyB0ZW1wdGluZywgaXQgaXMgbm90IHRoZSB1c3VhbCBjYXNlLiBTeXprYWxsZXIgY2FuIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcyBvciBvdmVybGF5cywgYW5kIGl0IGhhcyBidWlsdC1pbiB3YXlzIHRvIHRlc3Qgc2VyZGV2IGFuZCBJMkMgZHJpdmVycyBpZiBpbnN0YW50aWF0ZWQuIFNvLCBjYW4gd2UgZnV6eiB0aGlzIHRoaW5nPyBBYnNvbHV0ZWx5LlxuXG5UaGUgZHJpdmVyIGltcGxlbWVudHMgYHBzZV9jb250cm9sbGVyX29wc2AsIHNvIGlmIGl0J3MgcHJvYmVkLCB3ZSdyZSB0YWxraW5nIGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyB0byByZWFjaCB0aG9zZSBmdW5jdGlvbnMuIENydWNpYWxseSwgSTJDIGRldmljZXMgY2FuIGJlIGluc3RhbnRpYXRlZCBieSB3cml0aW5nIHRvIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYC4gKlRoYXQncyogdGhlIGtleS4gSSBzZWUgYW4gYG9mX21hdGNoX3RhYmxlYCwgbm90IGFuIGBpZF90YWJsZWAuIERvZXMgYG5ld19kZXZpY2VgIHdvcmsgd2l0aCBhbiBgb2ZfbWF0Y2hfdGFibGVgPyBOb3JtYWxseSBpdCB3YW50cyBhbiBgaWRfdGFibGVgIG9yIGBkcml2ZXIubmFtZWAuIFdhaXQuLi4gSTJDIGNvcmUgZmFsbHMgYmFjayB0byBgb2ZfbWF0Y2hfdGFibGVgIGlmIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgY29tcGF0aWJsZSBzdHJpbmcgKndpdGhvdXQqIHRoZSB2ZW5kb3IgcHJlZml4LCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBTeXprYWxsZXIgY2FuIGxvYWQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgYW55d2F5LlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIG91ciBmdXp6aW5nIGVmZm9ydHM/IFdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVudHJ5IHBvaW50cy4gVGhlIGRyaXZlciBleHBvc2VzIHRoZXNlIGZ1bmN0aW9uczogYHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZWAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2AsIGFuZCBzbyBvbi4gQWxsIHRoZXNlIGFyZSByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluayBpZiB0aGUgZGV2aWNlIGlzIHByb2JlZC4gQW5kIG9mIGNvdXJzZSwgdGhlIEkyQyBhbmQgVUFSVCByZWNlaXZlIHBhdGhzOiBgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZWAsIGBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdmAuIEltcG9ydGFudGx5LCBgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZWAgaXMgY2FsbGVkIHdoZW4gZGF0YSBjb21lcyBpbiBvdmVyIFVBUlQuIEluc3RhbnRpYXRlIHRoZSBzZXJkZXYgZGV2aWNlIGFuZCB3ZSBjYW4gZmVlZCBpdCBkYXRhLCBlLmcuLCB2aWEgYSBwdHkuIEV4Y2VsbGVudC4gVGltZSB0byBmdXp6LlxuXG5UaGlzIGlzIGEgbmV3IGRyaXZlciwgaXQgcGFyc2VzIGRhdGEgZnJvbSB0aGUgZGV2aWNlLCBhbmQgZXhwb3NlcyBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSDigJMgcHJpbWUgZnV6emluZyBtYXRlcmlhbC5cblxuVG8gZW5hYmxlIHRoaXMsIHdlIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgLCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVWAsIGBDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQ2AsIGFuZCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUYC4gTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBZZXAsIHRoYXQgbG9va3MgcmlnaHQ7IGBQU0VfQ09OVFJPTExFUmAgYW5kIGBTRVJJQUxfREVWX0JVU2AgbmVlZCB0byBiZSBlbmFibGVkIGFuZCBgSTJDYC5cblxuT2theSwgbGV0J3MgbGlzdCB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6XG5cbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYFxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYFxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdGBcbiogICBgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0YFxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzYFxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHJpb2BcbiogICBgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9gXG4qICAgYHJ0cHNlX21jdV91YXJ0X3JlY2VpdmVgXG4qICAgYHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdmBcbiogICBgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdmBcbiogICBgcnRwc2VfbWN1X2Rpc2NvdmVyXG5cbiIsIklucHV0VG9rZW5zIjoyNDAxNCwiT3V0cHV0VG9rZW5zIjozODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDE6MTU6NDkuMTA4Mjc4NTk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjA2NzMyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9DT05UUk9MTEVSXCIsXG4gICAgXCJQU0VfUkVBTFRFS19NQ1VfSTJDXCIsXG4gICAgXCJQU0VfUkVBTFRFS19NQ1VfVUFSVFwiLFxuICAgIFwiU0VSSUFMX0RFVl9CVVNcIixcbiAgICBcIkkyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0cHNlX21jdV9yZWdpc3RlclwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZW5hYmxlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9kaXNhYmxlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X3NldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCBzdXBwb3J0aW5nIGJvdGggSTJDIGFuZCBVQVJUIHRyYW5zcG9ydHMuIFRoZSBkcml2ZXIgZXhwb3NlcyBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBuZXRsaW5rIGFuZCBwYXJzZXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2Ugb3ZlciBJMkMvVUFSVC4gSXQgY2FuIGJlIHByb2JlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3IgSTJDIHN5c2ZzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIixcbiAgICBcIlNFUklBTF9ERVZfQlVTXCIsXG4gICAgXCJJMkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcmVnaXN0ZXJcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3Byb2JlXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX3Byb2JlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSwgc3VwcG9ydGluZyBib3RoIEkyQyBhbmQgVUFSVCB0cmFuc3BvcnRzLiBUaGUgZHJpdmVyIGV4cG9zZXMgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UgdmlhIGV0aHRvb2wgbmV0bGluayBhbmQgcGFyc2VzIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIG92ZXIgSTJDL1VBUlQuIEl0IGNhbiBiZSBwcm9iZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIEkyQyBzeXNmcywgbWFraW5nIGl0IHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow5rvsc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 00:55:17 +0000 UTC FinishedAt: 2026-07-27 01:15:51 +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": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART", "SERIAL_DEV_BUS", "I2C" ], "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": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REALTEK_MCU_I2C", "PSE_REALTEK_MCU_UART", "SERIAL_DEV_BUS", "I2C" ], "series_id": "fc30f103-2a5e-46c8-99ab-b940ecc51ee2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtpse_mcu_register", "rtpse_mcu_uart_probe", "rtpse_mcu_i2c_probe", "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_uart_receive" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDAxOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OywKICAgICYjMzQ7U0VSSUFMX0RFVl9CVVMmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCBzdXBwb3J0aW5nIGJvdGggSTJDIGFuZCBVQVJUIHRyYW5zcG9ydHMuIFRoZSBkcml2ZXIgZXhwb3NlcyBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBuZXRsaW5rIGFuZCBwYXJzZXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2Ugb3ZlciBJMkMvVUFSVC4gSXQgY2FuIGJlIHByb2JlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3IgSTJDIHN5c2ZzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI4NmMyMTY2MjA1OWRhNDgxZTcxOWFiOWFkYWVhZTg3N2EwNjgxZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwMToxNToxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wZjFhODE5ZGI0OWJiY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTgwIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBSZWFsdGVrIFBTRSBNQ1VcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gSm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBBIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IG1hbmFnZXMgdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KVxuJiM0MzsgIGhhcmR3YXJlIG9uIGEgcmFuZ2Ugb2YgbWFuYWdlZCBQb0Ugc3dpdGNoZXMuIFRoZSBob3N0IENQVSB0YWxrcyBvbmx5IHRvXG4mIzQzOyAgdGhpcyBNQ1UgLSBvdmVyIEkyQy9TTUJ1cyBvciBVQVJUIC0gdXNpbmcgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sO1xuJiM0MzsgIHRoZSBQU0Ugc2lsaWNvbiBpdCBkcml2ZXMgc2l0cyBiZWhpbmQgdGhlIE1DVSBhbmQgaXMgbmV2ZXIgYWNjZXNzZWRcbiYjNDM7ICBkaXJlY3RseS4gRm9yIGV4YW1wbGUsIG9uIHRoZSBaeXhlbCBHUzE5MDAtMTBIUCB0aGUgU29DIHJlYWNoZXMgdGhlIE1DVVxuJiM0MzsgIG92ZXIgVUFSVCwgYW5kIHRoZSBNQ1UgbWFuYWdlcyB0aGUgb24tYm9hcmQgUFNFIGNoaXAuXG4mIzQzO1xuJiM0MzsgIFRoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIE1DVSB0b2dldGhlciB3aXRoIGl0cyBSZWFsdGVrIGZpcm13YXJlOiB0aGVcbiYjNDM7ICBmaXJtd2FyZSBhbmQgaXRzIGhvc3QgcHJvdG9jb2wsIHdoaWNoIGFyZSBzdGFibGUgYWNyb3NzIGJvYXJkcy4gVGhlXG4mIzQzOyAgbWljcm9jb250cm9sbGVyIHNpbGljb24gaXMgYSBnZW5lcmFsLXB1cnBvc2UgcGFydCB0aGF0IHZhcmllcywgYW5kIHRoZVxuJiM0MzsgIFBTRSBzaWxpY29uIGJlaGluZCB0aGUgTUNVIChSZWFsdGVrIFJUTDgyM3gvUlRMODIzOSogb3IgQnJvYWRjb21cbiYjNDM7ICBCQ001OXh4eCkgaXMgcmVwb3J0ZWQgYnkgdGhlIE1DVSBhbmQgZGV0ZWN0ZWQgYXQgcnVudGltZSAtIG5laXRoZXIgaXNcbiYjNDM7ICBuYW1lZCBoZXJlLlxuJiM0MztcbiYjNDM7ICBUd28gcHJvdG9jb2wgZ2VuZXJhdGlvbnMgZXhpc3QsIGJvdGggUmVhbHRlayYjMzk7czpcbiYjNDM7ICAgIGdlbjEgIG9sZGVyIGJvYXJkcywgd2hlcmUgdGhlIE1DVSBmcm9udHMgQnJvYWRjb20gUFNFIHNpbGljb25cbiYjNDM7ICAgIGdlbjIgIHRoZSBhbHRlcmVkIHByb3RvY29sIHVzZWQgd2l0aCBSZWFsdGVrJiMzOTtzIG93biBQU0Ugc2lsaWNvblxuJiM0MztcbiYjNDM7ICBPbiBhbiBJMkMgYXR0YWNobWVudCB0aGUgZnJhbWluZyB0aGUgTUNVIGZpcm13YXJlIGV4cGVjdHMgaXMgcGFydCBvZiB0aGVcbiYjNDM7ICBjb21wYXRpYmxlOiAmIzM5Oy1zbWJ1cyYjMzk7IChyZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlIGFuZCBhIHJlcGVhdGVkXG4mIzQzOyAgc3RhcnQpIG9yICYjMzk7LWkyYyYjMzk7IChiYXJlIGJsb2NrIHdyaXRlcyBhbmQgcmVhZHMpLiBBIFVBUlQgYXR0YWNobWVudCBjYXJyaWVzXG4mIzQzOyAgbm8gZnJhbWluZyBzdWZmaXg7IHRoZSB0cmFuc3BvcnQgaXMgZ2l2ZW4gYnkgdGhlIHBhcmVudCAmIzM5O3NlcmlhbCYjMzk7IG5vZGUuXG4mIzQzO1xuJiM0MzsgIEVhY2ggYm9hcmQgYWRkaXRpb25hbGx5IGNhcnJpZXMgYSBkZXZpY2Utc3BlY2lmaWMgY29tcGF0aWJsZSB0aGF0IGZhbGxzXG4mIzQzOyAgYmFjayB0byBvbmUgb2YgdGhlIHByb3RvY29sIGNvbXBhdGlibGVzIGFib3ZlLiBEcml2ZXJzIGJpbmQgb24gdGhlXG4mIzQzOyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kXG4mIzQzOyAgcmVzZXJ2ZXMgYSBwbGFjZSBmb3IgYSBmdXR1cmUgcGVyLWJvYXJkIHF1aXJrIHdpdGhvdXQgaGF2aW5nIHRvIHJldHJvZml0XG4mIzQzOyAgZGV2aWNlIHRyZWVzIGFscmVhZHkgaW4gdGhlIGZpZWxkLlxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgb25lT2Y6XG4mIzQzOyAgICAgICMgVUFSVFxuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYTEtcHNlXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMVxuJiM0MztcbiYjNDM7ICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkyMC0yNGhwLXYyLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjEtc21idXNcbiYjNDM7XG4mIzQzOyAgICAgICMgVUFSVFxuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYjEtcHNlXG4mIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCx4bWcxOTE1LTEwZXAtcHNlXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMlxuJiM0MztcbiYjNDM7ICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHp5eGVsLHhzMTkzMC0xMmhwLXBzZVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcbiYjNDM7XG4mIzQzOyAgICAgICMgSTJDLCByYXcgZnJhbWluZ1xuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0gbGlua3N5cyxsZ3MzMjhtcGMtdjItcHNlXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcbiYjNDM7XG4mIzQzOyAgcmVnOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgcmVzZXQtZ3Bpb3M6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogUmVzZXQgbGluZSBvZiB0aGUgTUNVLlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgZGlzYWJsZS1wb3J0cy1ncGlvczpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBIYXJkd2FyZSBnYXRlIHRoYXQgZm9yY2VzIGFsbCBwb3J0cyBpbnRvIGFkbWluLWRpc2FibGVkIHN0YXRlIHdoaWxlXG4mIzQzOyAgICAgIGFzc2VydGVkLlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sI1xuJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvc2VyaWFsL3NlcmlhbC1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXG4mIzQzOyAgIyBBICYjMzk7LXNtYnVzJiMzOTsvJiMzOTstaTJjJiMzOTsgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICYjMzk7cmVnJiMzOTsgYW5kXG4mIzQzOyAgIyBjYW5ub3QgY2Fycnkgc2VyaWFsIGJ1cyBwcm9wZXJ0aWVzLiBBIGJhcmUgZ2VuIGNvbXBhdGlibGUgaXMgYSBVQVJUXG4mIzQzOyAgIyBhdHRhY2htZW50OiBubyAmIzM5O3JlZyYjMzk7LCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIHJlZ1xuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXG4mIzQzOyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6IGZhbHNlXG4mIzQzO1xuJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudFxuJiM0MzsgIC0gfFxuJiM0MzsgICAgaTJjIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7enl4ZWwseHMxOTMwLTEyaHAtcHNlXCYjMzQ7LCBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBpMmMge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcJiMzNDssIFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgIyBVQVJUIGF0dGFjaG1lbnRcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIHNlcmlhbCB7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3p5eGVsLGdzMTkwMC0xMGhwLWExLXBzZVwmIzM0OywgXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjFcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSBcdTAwM2MxOTIwMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHBzZS1waXMge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA2MGNmZjAwOTUzZGNiZS4uMTYxMzZhYzExZTA2MzcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0yMjczNiw2ICYjNDM7MjI3MzYsMTMgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0aW5jbHVkZS9zb3VuZC9ydCouaFxuIEY6XHRzb3VuZC9zb2MvY29kZWNzL3J0KlxuIFxuJiM0MztSRUFMVEVLIFBTRSBNQ1UgRFJJVkVSXG4mIzQzO006XHRKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuJiM0MztcbiBSRUFMVEVLIE9UVE8gV0FUQ0hET0dcbiBNOlx0U2FuZGVyIFZhbmhldWxlIFx1MDAzY3NhbmRlckBzdmFuaGV1bGUubmV0XHUwMDNlXG4gTDpcdGxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbmluZGV4IDdlZjI5NjU3ZWU1ZGQxLi5hMGYyYWU2NjhjNjdjOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuQEAgLTEzLDYgJiM0MzsxMywzNCBAQCBtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXG4gXG4gaWYgUFNFX0NPTlRST0xMRVJcbiBcbiYjNDM7Y29uZmlnIFBTRV9SRUFMVEVLX01DVVxuJiM0MztcdHRyaXN0YXRlXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzIHNlbGVjdGVkXG4mIzQzO1x0ICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB0cmFuc3BvcnQgb3B0aW9ucyBiZWxvdy5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQ1xuJiM0MztcdHNlbGVjdCBQU0VfUkVBTFRFS19NQ1VcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuJiM0MztcdCAgaGFyZHdhcmUgb24gdmFyaW91cyBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMsIGF0dGFjaGVkXG4mIzQzO1x0ICB2aWEgSTJDL1NNQnVzLiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsXG4mIzQzO1x0ICBQU0Ugc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYVxuJiM0MztcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuXG4mIzQzO1xuJiM0Mztjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlRcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIFNFUklBTF9ERVZfQlVTXG4mIzQzO1x0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4mIzQzO1x0ICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWRcbiYjNDM7XHQgIHZpYSBVQVJULiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsIFBTRVxuJiM0MztcdCAgc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYVxuJiM0MztcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LlxuJiM0MztcbiBjb25maWcgUFNFX1JFR1VMQVRPUlxuIFx0dHJpc3RhdGUgXCYjMzQ7UmVndWxhdG9yIGJhc2VkIFBTRSBjb250cm9sbGVyXCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG5pbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuQEAgLTMsNiAmIzQzOzMsOSBAQFxuIFxuIG9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgJiM0Mzs9IHBzZV9jb3JlLm9cbiBcbiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVSkgJiM0Mzs9IHJlYWx0ZWstcHNlLW1jdS1jb3JlLm9cbiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkMpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cbiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUKSAmIzQzOz0gcmVhbHRlay1wc2UtbWN1LXVhcnQub1xuIG9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSAmIzQzOz0gcHNlX3JlZ3VsYXRvci5vXG4gb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSAmIzQzOz0gcGQ2OTJ4MC5vXG4gb2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODIwNGNiNDMwZmZlYThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5AQCAtMCwwICYjNDM7MSw5ODkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXNcbiYjNDM7ICogUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLiBUaGUgTUNVIHNwZWFrcyBhIDEyLWJ5dGUgZml4ZWQtZnJhbWVcbiYjNDM7ICogbWFuYWdlbWVudCBwcm90b2NvbDsgdGhpcyBkcml2ZXIgY292ZXJzIHR3byBnZW5lcmF0aW9ucyBvZiB0aGVcbiYjNDM7ICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLlxuJiM0MzsgKlxuJiM0MzsgKiBNYW55IFBvRSBzd2l0Y2ggZGVzaWducyBwdXQgYSBkZWRpY2F0ZWQgbWljcm9jb250cm9sbGVyIGluIGZyb250IG9mIHRoZVxuJiM0MzsgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yXG4mIzQzOyAqIFVBUlQsIGFuZCB0aGUgTUNVIGluIHR1cm4gbWFuYWdlcyB0aGUgUFNFIGNoaXBzIG9uIHRoZSBib2FyZC4gVGhlIE1DVVxuJiM0MzsgKiBzcGVha3MgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdFxuJiM0MzsgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuXG4mIzQzOyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmVcbiYjNDM7ICogdGhlIE1DVSBmcm9udHMgYW5kIG1hbmFnZXMgQnJvYWRjb20gUFNFIHNpbGljb247IEdlbjIgYmVpbmcgdXNlZCB3aXRoXG4mIzQzOyAqIFJlYWx0ZWsgUFNFIHNpbGljb24uIFRoZSB0d28gc2hhcmUgZnJhbWUgZm9ybWF0IGFuZCBhIHN1bS1tb2QtMjU2XG4mIzQzOyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzO1xuJiM0MzsgKiB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIHBlci1kaWFsZWN0IG9wY29kZSB0YWJsZSBhbmQgcGFyc2VyIGhvb2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcbiYjNDM7ICogd2l0aG91dCBhIG1hbmFnZW1lbnQgTUNVLCBNQ1UgZGVzaWducyB0aGF0IHNwZWFrIGFuIHVucmVsYXRlZCBwcm90b2NvbFxuJiM0MzsgKiBmYW1pbHksIGFuZCBcJiMzNDtkdW1iIFBTRVwmIzM0OyBtb2RlcyB3aGVyZSBubyBob3N0IGNvbnRyb2wgaXMgd2lyZWQgdXAgYXQgYWxsLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1VcbiYjNDM7ICogcmVzcG9uc2VzLCBhbmQgdGhlIHBzZV9jb250cm9sbGVyX29wcyBpbnRlZ3JhdGlvbi4gVHJhbnNwb3J0IG1vZHVsZXNcbiYjNDM7ICogKHJlYWx0ZWstcHNlLW1jdS1pMmMsIHJlYWx0ZWstcHNlLW1jdS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3ZcbiYjNDM7ICogY2FsbGJhY2tzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4Qlx0XHQweDAxMzhcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcdFx0MHgwMDM5XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5Q1x0XHQweDAxMzlcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExXHRcdDB4ZTExMVxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcdFx0MHhlMTIxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElOR1x0XHQweDAxXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcdFx0MHgwMlxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19URVNUXHRcdFx0MHgwM1x0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUXHRcdDB4MDRcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFRcdFx0MHgwNVx0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkdcdFx0MHgwNlxuJiM0MztcbiYjNDM7LyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSXHQweDAyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9NQVhfUE9SVFNcdFx0XHQ0OFxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWVx0XHQzXG4mIzQzO1xuJiM0MztlbnVtIHJ0cHNlX21jdV9jbWQge1xuJiM0MztcdFJUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURSxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLFxuJiM0MztcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFLFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuJiM0MztcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVMsXG4mIzQzO1x0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUUyxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcbiYjNDM7XHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUcsXG4mIzQzO1xuJiM0MztcdFJUUFNFX01DVV9OVU1fQ01EUyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIHtcbiYjNDM7XHR1OCBvcDtcbiYjNDM7XHRib29sIHZhbGlkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogU2hvcnRoYW5kIGZvciB0aGUgZGVzaWduYXRlZC1pbml0aWFsaXplciBlbnRyaWVzIGluIGRpYWxlY3Qgb3Bjb2RlIHRhYmxlcy4gKi9cbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKVx0eyAub3AgPSAob3BjKSwgLnZhbGlkID0gdHJ1ZSB9XG4mIzQzO1xuJiM0MzsvKiBQYXJzZWQgTUNVIHJlc3BvbnNlIHN0cnVjdHVyZXMgKGRlY29kZWQgZnJvbSBydHBzZV9tY3VfbXNnIHJlcGxpZXMpICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2luZm8ge1xuJiM0MztcdHU4IG1heF9wb3J0cztcbiYjNDM7XHRib29sIHN5c3RlbV9lbmFibGU7XG4mIzQzO1x0dTE2IGRldmljZV9pZDtcbiYjNDM7XHR1OCBzd192ZXI7XG4mIzQzO1x0dTggbWN1X3R5cGU7XG4mIzQzO1x0dTggY29uZmlnX3N0YXR1cztcbiYjNDM7XHR1OCBleHRfdmVyO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcbiYjNDM7XHR1OCB1dmxvO1xuJiM0MztcdHU4IG92bG87XG4mIzQzO1x0Ym9vbCBwcmVhbGxvY19lbmFibGU7XG4mIzQzO1x0dTggbnVtX29mX3BzZXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHtcbiYjNDM7XHR1OCBzdHMxO1xuJiM0MztcdHU4IHN0czI7XG4mIzQzO1x0dTggc3RzMztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7XG4mIzQzO1x0dTE2IHZvbHRhZ2VfcmF3O1x0LyogNjQuNDVtVi9MU0IgKi9cbiYjNDM7XHR1MTYgY3VycmVudF9yYXc7XHQvKiAxbUEvTFNCICovXG4mIzQzO1x0dTE2IHRlbXBlcmF0dXJlX3JhdztcdC8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovXG4mIzQzO1x0dTE2IHBvd2VyX3JhdztcdFx0LyogMTAwbVcvTFNCICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIHtcbiYjNDM7XHRib29sIGVuYWJsZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIHtcbiYjNDM7XHR1OCBtYXhfcG93ZXI7XG4mIzQzO1x0dTggcHJpb3JpdHk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3Qge1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIG9wY29kZVtSVFBTRV9NQ1VfTlVNX0NNRFNdO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlc3BvbnNlIHBhcnNlcnMgZm9yIHRoZSBmaWVsZHMgdGhhdCBkaWZmZXIgYmV0d2VlbiBkaWFsZWN0czsgZWFjaFxuJiM0MztcdCAqIGRpYWxlY3Qgc3VwcGxpZXMgaXRzIG93bi4gT3RoZXIgcmVzcG9uc2VzIHNoYXJlIG9uZSBsYXlvdXQgYW5kIGFyZVxuJiM0MztcdCAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssXG4mIzQzO1x0ICogYXMgYSBtaXNtYXRjaGVkIGxheW91dCBjYW5ub3QgYmUgZGV0ZWN0ZWQgKHRoZSBjaGVja3N1bSBzdGlsbCBwYXNzZXMpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7XG4mIzQzO1x0aW50ICgqcGFyc2VfcG9ydF9jbGFzcykoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKTtcbiYjNDM7XHRjb25zdCBjaGFyICooKm1jdV90eXBlX3N0cikodW5zaWduZWQgaW50IG1jdV90eXBlKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdHUxNiBkZXZpY2VfaWQ7XG4mIzQzO1x0dTMyIG1heF9tV19wZXJfcG9ydDtcbiYjNDM7XHRlbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDtcdC8qIGNvbW1hbmQgdXNlZCBieSBzZXRfcHdfbGltaXQgKi9cbiYjNDM7XHR1MzIgcHdfc2V0X2xzYl9tVztcdFx0LyogTFNCIG9mIHB3X3NldF9jbWQgdmFsdWUsIGluIG1XICovXG4mIzQzO1x0dTMyIHB3X3JlYWRfbHNiX21XO1x0XHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEIsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOEJcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcbiYjNDM7XHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcbiYjNDM7XHQubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtSVEw4MjM5XCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gNDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzljX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXG4mIzQzO1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7UlRMODIzOUNcJiMzNDssXG4mIzQzO1x0LnB3X3JlYWRfbHNiX21XID0gNDAwLFxuJiM0MztcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcbiYjNDM7XHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMSxcbiYjNDM7XHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtCQ001OTExMVwmIzM0OyxcbiYjNDM7XHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4mIzQzO1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuJiM0MztcdC5wd19zZXRfbHNiX21XID0gMjAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XG4mIzQzO1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxuJiM0MztcdCAqIGFuZCB0aGUgR2VuMSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kIChcdTAwM2M9NTFXKTtcbiYjNDM7XHQgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbiYjNDM7XHQubmFtZSA9IFwmIzM0O0JDTTU5MTIxXCYjMzQ7LFxuJiM0MztcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcbiYjNDM7XHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4mIzQzO1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpO1xuJiM0MztcdG1zZy1cdTAwM2VvcGNvZGUgPSBvcGNvZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHU4IHN1bSA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4tLSlcbiYjNDM7XHRcdHN1bSAmIzQzOz0gKmJ1ZiYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIHN1bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZG9feGZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KSB7XG4mIzQzO1x0XHQvKiBSb2xsaW5nIHNlcV9udW0gc28gYSBsYXRlIHJlcGx5IGNhbiYjMzk7dCBwYXNzIGFzIGEgbGF0ZXIgb25lLiAqL1xuJiM0MztcdFx0cmVxLVx1MDAzZXNlcV9udW0gPSBwc2UtXHUwMDNlc2VxJiM0MzsmIzQzOztcbiYjNDM7XHRcdHJlcS1cdTAwM2VjaGVja3N1bSA9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHBzZS1cdTAwM2V0cmFuc3BvcnQtXHUwMDNlc2VuZChwc2UsIHJlcSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgTUNVIG5lZWRzIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiByZWNlaXZpbmcgYSByZXF1ZXN0XG4mIzQzO1x0XHQgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0b1xuJiM0MztcdFx0ICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3ZcbiYjNDM7XHRcdCAqIHBhdGggc2ltcGxlOiBhIHNpbmdsZSBib3VuZGVkIHdhaXQgcmF0aGVyIHRoYW4gYSBnZW5lcmljIHJldHJ5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQocmVzcCwgMCwgc2l6ZW9mKCpyZXNwKSk7XG4mIzQzO1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXJlY3YocHNlLCByZXEsIHJlc3ApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IGhhcm1sZXNzXG4mIzQzO1x0ICogdG8gY2hlY2sgZm9yIEdlbjIgdG9vKS4gQ2F0Y2ggdGhlc2UgYmVmb3JlIHRoZSBnZW5lcmljIG9wY29kZS9DUkNcbiYjNDM7XHQgKiBtaXNtYXRjaCBwYXRoIHNvIGNhbGxlcnMgc2VlIGEgbWVhbmluZ2Z1bCBlcnJuby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKHJlc3AtXHUwMDNlb3Bjb2RlKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6XG4mIzQzO1x0XHRyZXR1cm4gLUVCQURFO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTpcbiYjNDM7XHRcdHJldHVybiAtRUJBRE1TRztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmVzcC1cdTAwM2VvcGNvZGUgIT0gcmVxLVx1MDAzZW9wY29kZSB8fFxuJiM0MztcdCAgICByZXNwLVx1MDAzZXNlcV9udW0gIT0gcmVxLVx1MDAzZXNlcV9udW0gfHxcbiYjNDM7XHQgICAgcmVzcC1cdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4mIzQzO1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgcmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyZXNwLVx1MDAzZXBheWxvYWRbMF0gIT0gcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9jbWQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCB1OCBvcGNvZGUsIHU4IGFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuJiM0MztcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcbiYjNDM7XHRyZXEucGF5bG9hZFsxXSA9IGFyZztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocmVzcC5wYXlsb2FkWzBdICE9IHBvcnQgfHwgcmVzcC5wYXlsb2FkWzFdICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEdsb2JhbCBvcGVyYXRpb25zICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvKHJlc3AucGF5bG9hZCwgaW5mbyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgKmNvbmZpZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2V1dmxvID0gcmVzcC5wYXlsb2FkWzBdO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZW51bV9vZl9wc2VzID0gcmVzcC5wYXlsb2FkWzZdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbiYjNDM7XHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcdTAwMjZyZXEsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMxID0gcmVzcC5wYXlsb2FkWzFdO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xuJiM0MztcdHN0YXR1cy1cdTAwM2VzdHMzID0gcmVzcC5wYXlsb2FkWzNdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQgKm1lYXN1cmVtZW50KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtZWFzdXJlbWVudC1cdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xuJiM0MztcdG1lYXN1cmVtZW50LVx1MDAzZWN1cnJlbnRfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFszXSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNldGVtcGVyYXR1cmVfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs1XSk7XG4mIzQzO1x0bWVhc3VyZW1lbnQtXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XG4mIzQzO1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZWVuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VtYXhfcG93ZXIgPSByZXNwLnBheWxvYWRbM107XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXByaW9yaXR5ID0gcmVzcC5wYXlsb2FkWzRdO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1xuJiM0MztcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXTtcbiYjNDM7XHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUFNFIGNvbnRyb2xsZXIgb3BzICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0YWRtaW5fc3RhdGUtXHUwMDNlYzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDpcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhwc2UsIGlkLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4mIzQzO1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfU0VBUkNISU5HO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19URVNUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVEVTVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDpcbiYjNDM7XHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHdfc3RhdHVzLVx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVU5LTk9XTjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhXG4mIzQzO1x0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XG4mIzQzO1x0ICogZG9lcyBub3QsIHNvIHRoZXJlIGlzIG5vIGNsYXNzIHRvIHJlcG9ydCBhbmQgd2UgcmV0dXJuIDAuIFRoYXQgaXNcbiYjNDM7XHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlc1xuJiM0MztcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzLnN0czEpIHtcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkc6XG4mIzQzO1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuJiM0MztcdFx0cmV0dXJuIHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MoXHUwMDI2c3RhdHVzKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiAxMDBtVyBwZXIgTFNCICovXG4mIzQzO1x0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiB1VjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFx1MDAyNm1lYXN1cmVtZW50KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogNjQuNDVtViBwZXIgTFNCICovXG4mIzQzO1x0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgY29uZmlnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsIFx1MDAyNmNvbmZpZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVx1MDAzZWNoaXAtXHUwMDNlcHdfcmVhZF9sc2JfbVc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqdHlwZV9vcGMsICp2YWxfb3BjO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLVx1MDAzZWNoaXA7XG4mIzQzO1x0dTggcHJnX3ZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobWF4X21XIFx1MDAzYyAwIHx8IG1heF9tVyBcdTAwM2UgY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0dHlwZV9vcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXTtcbiYjNDM7XHR2YWxfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW2NoaXAtXHUwMDNlcHdfc2V0X2NtZF07XG4mIzQzO1x0LyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqL1xuJiM0MztcdGlmICghdHlwZV9vcGMtXHUwMDNldmFsaWQgfHwgIXZhbF9vcGMtXHUwMDNldmFsaWQgfHwgIWNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcbiYjNDM7XHQgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW5cbiYjNDM7XHQgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0XG4mIzQzO1x0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtXHUwMDNlb3AsIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLVx1MDAzZW9wLCBwcmdfdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4mIzQzO1x0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlKTtcbiYjNDM7XHRpZiAoIXJhbmdlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJhbmdlWzBdLm1pbiA9IDA7XG4mIzQzO1x0cmFuZ2VbMF0ubWF4ID0gcHNlLVx1MDAzZWNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0O1xuJiM0MztcbiYjNDM7XHRvdXQtXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbmZpZy5wcmlvcml0eTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4mIzQzO1xuJiM0MztcdGlmIChwcmlvIFx1MDAzZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldO1xuJiM0MztcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy1cdTAwM2VvcCwgcHJpbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfb3BzIHJ0cHNlX21jdV9vcHMgPSB7XG4mIzQzO1x0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcbiYjNDM7XHQucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsXG4mIzQzO1x0LnBpX2dldF9wd19jbGFzcyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyxcbiYjNDM7XHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXG4mIzQzO1x0LnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSxcbiYjNDM7XHQucGlfZGlzYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUsXG4mIzQzO1x0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXG4mIzQzO1x0LnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCxcbiYjNDM7XHQucGlfc2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0LFxuJiM0MztcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcbiYjNDM7XHQucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyxcbiYjNDM7XHQucGlfc2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2Rpc2NvdmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgZXh0X2NvbmZpZztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXG4mIzQzO1x0ICogKC1FTlhJTyAvIC1FUkVNT1RFSU8pLCByZXBvcnQgbm90LXJlYWR5ICgtRUFHQUlOKSwgb3IgZW1pdCBhXG4mIzQzO1x0ICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhXG4mIzQzO1x0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX0JPT1RfVElNRU9VVF9NUyk7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FVElNRURPVVQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5YSU8gXHUwMDI2XHUwMDI2IHJldCAhPSAtRVJFTU9URUlPIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVCQURNU0cgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUJBREUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0bXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTtcbiYjNDM7XHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBpbmZvXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpbmZvLVx1MDAzZWRldmljZV9pZCkge1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcbiYjNDM7XHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOGJfaW5mbztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxuJiM0MztcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM5X2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzljX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTExX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XG4mIzQzO1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNmJjbTU5MTIxX2luZm87XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCwgXCYjMzQ7dW5rbm93biBQU0UgaWQgMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZGV2aWNlX2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VtYXhfcG9ydHMgfHwgaW5mby1cdTAwM2VtYXhfcG9ydHMgXHUwMDNlIFJUUFNFX01DVV9NQVhfUE9SVFMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7TUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XFxuXCYjMzQ7LCBpbmZvLVx1MDAzZW1heF9wb3J0cyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhwc2UsIFx1MDAyNmV4dF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byByZWFkIE1DVSBleHQgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm8ocHNlLVx1MDAzZWRldiwgXCYjMzQ7JXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0IHBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cihpbmZvLVx1MDAzZW1jdV90eXBlKSwgcHNlLVx1MDAzZWNoaXAtXHUwMDNlbmFtZSxcbiYjNDM7XHRcdCBpbmZvLVx1MDAzZWRldmljZV9pZCwgaW5mby1cdTAwM2VtYXhfcG9ydHMsIGV4dF9jb25maWcubnVtX29mX3BzZXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShwc2UtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIW1hdGNoKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVOT0RFViwgXCYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXFxuXCYjMzQ7KTtcbiYjNDM7XHRwc2UtXHUwMDNlZGlhbGVjdCA9IG1hdGNoLVx1MDAzZWRpYWxlY3Q7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0XG4mIzQzO1x0ICogcHJvYmUgdGltZSwgcmF0aGVyIHRoYW4gTlVMTC1kZXJlZiYjMzk7aW5nIGxhdGVyIGZyb20gYSBmYXN0IHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwc2UtXHUwMDNlZGlhbGVjdCB8fFxuJiM0MztcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8gfHxcbiYjNDM7XHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZXBhcnNlX3BvcnRfY2xhc3MgfHxcbiYjNDM7XHQgICAgIXBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW1jdV90eXBlX3N0cilcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlbGVhc2UgdGhlIE1DVSBmcm9tIHJlc2V0IGJlZm9yZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb247IHRoZVxuJiM0MztcdCAqIGJvb3QtcmV0cnkgbG9vcCBpbiBkaXNjb3ZlcigpIHdhaXRzIGZvciBpdCB0byBhbnN3ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z3Bpb2QgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXHUwMDNlZGV2LCBcJiMzNDtyZXNldFwmIzM0OywgR1BJT0RfT1VUX0xPVyk7XG4mIzQzO1x0aWYgKElTX0VSUihncGlvZCkpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcmVzZXQgZ3Bpb1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU29tZSBib2FyZHMgZ2F0ZSBhbGwgcG9ydHMgdGhyb3VnaCBhIGhhcmR3YXJlIGxpbmU7IGRlYXNzZXJ0IGl0IHNvXG4mIzQzO1x0ICogdGhlIE1DVSBwcm90b2NvbCBnb3Zlcm5zIHBlci1wb3J0IGFkbWluIHN0YXRlIGZyb20gaGVyZSBvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRncGlvZCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHBzZS1cdTAwM2VkZXYsIFwmIzM0O2Rpc2FibGUtcG9ydHNcJiMzNDssIEdQSU9EX09VVF9MT1cpO1xuJiM0MztcdGlmIChJU19FUlIoZ3Bpb2QpKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgUFRSX0VSUihncGlvZCksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IGRpc2FibGUtcG9ydHMgZ3Bpb1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkge1xuJiM0MztcdFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcbiYjNDM7XHRcdC8qIERpYWxlY3RzIHdpdGhvdXQgYSBnbG9iYWwtc3RhdGUgY29uY2VwdCAoZS5nLiBHZW4xKSByZXR1cm5cbiYjNDM7XHRcdCAqIC1FT1BOT1RTVVBQOyB0cmVhdCB0aGF0IGFzIFwmIzM0O25vIHNlcGFyYXRlIGVuYWJsZSByZXF1aXJlZFwmIzM0Oy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgUFNFIHN5c3RlbVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIXJldCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSwgcHNlKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEZXBlbmRpbmcgb24gdGhlIE1DVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnRcbiYjNDM7XHQgKiBmb3IgZXZlcnkgYm9hcmQpLCBpdCBpc24mIzM5O3Qga25vd24gd2hldGhlciB0aGUgUG9FIHN1YnN5c3RlbSBpcyBhY3RpdmUgb3JcbiYjNDM7XHQgKiBpbmFjdGl2ZSBieSBkZWZhdWx0LiBBdCB0aGlzIHN0YWdlLCB0aGUgUFNFIGNoaXBzIG1pZ2h0IGFscmVhZHkgZGVsaXZlclxuJiM0MztcdCAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdC8qIHBjZGV2Lm93bmVyIGlzIHNldCBieSB0aGUgdHJhbnNwb3J0LCBzbyB0aGUgcmVnaXN0ZXJlZCBjb250cm9sbGVyXG4mIzQzO1x0ICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2Lm9wcyAgICAgID0gXHUwMDI2cnRwc2VfbWN1X29wcztcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYuZGV2ICAgICAgPSBwc2UtXHUwMDNlZGV2O1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMztcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYubnJfbGluZXMgPSBpbmZvLm1heF9wb3J0cztcbiYjNDM7XHRwc2UtXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZO1xuJiM0MztcdHBzZS1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocHNlLVx1MDAzZWRldiwgXHUwMDI2cHNlLVx1MDAzZXBjZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcmVnaXN0ZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGluZm8tXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcbiYjNDM7XHRpbmZvLVx1MDAzZXN5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpO1xuJiM0MztcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuJiM0MztcdGluZm8tXHUwMDNlc3dfdmVyID0gcGF5bG9hZFs1XTtcbiYjNDM7XHRpbmZvLVx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcbiYjNDM7XHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuJiM0MztcdGluZm8tXHUwMDNlZXh0X3ZlciA9IHBheWxvYWRbOF07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHQvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovXG4mIzQzO1x0cmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtXHUwMDNlc3RzMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpydHBzZV9tY3VfZ2VuMl9tY3VfdHlwZV9zdHIodW5zaWduZWQgaW50IG1jdV90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChtY3VfdHlwZSkge1xuJiM0MztcdGNhc2UgMHgwMDpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJGMzEwXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMTpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJGMjMwXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMjpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJGMzAzXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMzpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJGMTAzXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwNDpcdHJldHVybiBcJiMzNDtHaWdhRGV2aWNlIEdEMzJFMTAzXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgxMDpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE0wNTE2XCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgxMTpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE0wNTY0XCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgxMjpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE5VQzAyOVwmIzM0OztcbiYjNDM7XHRkZWZhdWx0Olx0cmV0dXJuIFwmIzM0O3Vua25vd25cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aW5mby1cdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xuJiM0MztcdC8qIEdlbjEgaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxuJiM0MztcdCAqIFwmIzM0O3JlbW90ZSBlbmFibGVcJiMzNDsgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcdTAwMjYgQklUKDIpKTtcbiYjNDM7XHRpbmZvLVx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZwYXlsb2FkWzNdKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XG4mIzQzO1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4mIzQzO1x0aW5mby1cdTAwM2Vjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTtcbiYjNDM7XHRpbmZvLVx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0LyogR2VuMSBwdXRzIHRoZSBkZXRlY3RlZCBjbGFzcyBpbiBwYXlsb2FkWzNdICg9PSBzdHMzKSBkaXJlY3RseS5cbiYjNDM7XHQgKiBNYXNrIHRvIHRoZSBsb3cgbmliYmxlOyBjbGFzcyBpcyAwLi44IGFuZCBhbnkgaGlnaCBiaXRzIHdvdWxkIGJlXG4mIzQzO1x0ICogbm9pc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHN0YXR1cy1cdTAwM2VzdHMzIFx1MDAyNiAweDBmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobWN1X3R5cGUpIHtcbiYjNDM7XHRjYXNlIDB4MDA6XHRyZXR1cm4gXCYjMzQ7U1QgTWljcm8gU1QzMkYxMDBcJiMzNDs7XG4mIzQzO1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwmIzM0O051dm90b24gTTA1eHggTEFOXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwMjpcdHJldHVybiBcJiMzNDtTVCBNaWNybyBTVEYwMzBDOFwmIzM0OztcbiYjNDM7XHRjYXNlIDB4MDM6XHRyZXR1cm4gXCYjMzQ7TnV2b3RvbiBNMDU4U0FOXCYjMzQ7O1xuJiM0MztcdGNhc2UgMHgwNDpcdHJldHVybiBcJiMzNDtOdXZvdG9uIE5VQzEyMlwmIzM0OztcbiYjNDM7XHRkZWZhdWx0Olx0cmV0dXJuIFwmIzM0O3Vua25vd25cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiA9IHtcbiYjNDM7XHQucGFyc2Vfc3lzdGVtX2luZm8gPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9zeXN0ZW1faW5mbyxcbiYjNDM7XHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLFxuJiM0MztcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cixcbiYjNDM7XHQub3Bjb2RlID0ge1xuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cdD0gUlRQU0VfTUNVX09QKDB4MDApLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDRhKSxcbiYjNDM7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDEyKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFldXHQ9IFJUUFNFX01DVV9PUCgweDE1KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVU11cdFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cdD0gUlRQU0VfTUNVX09QKDB4NDQpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQ4KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXHQ9IFJUUFNFX01DVV9PUCgweDQ5KSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0ge1xuJiM0MztcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvLFxuJiM0MztcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MsXG4mIzQzO1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLFxuJiM0MztcdC5vcGNvZGUgPSB7XG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dXHRcdD0gUlRQU0VfTUNVX09QKDB4MjApLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxuJiM0MztcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVx0XHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdXHQ9IFJUUFNFX01DVV9PUCgweDE2KSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVx0PSBSVFBTRV9NQ1VfT1AoMHgxYSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4MjEpLFxuJiM0MztcdFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdXHQ9IFJUUFNFX01DVV9PUCgweDMwKSxcbiYjNDM7XHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR11cdFx0PSBSVFBTRV9NQ1VfT1AoMHgyNSksXG4mIzQzO1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHgyNiksXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhID0ge1xuJiM0MztcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjFfZGF0YSk7XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YSA9IHtcbiYjNDM7XHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2RhdGEpO1xuJiM0MztcbiYjNDM7LyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqL1xuJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgPSB7XG4mIzQzO1x0LmRpYWxlY3QgPSBcdTAwMjZydHBzZV9tY3VfZGlhbGVjdF9nZW4yLFxuJiM0MztcdC5uYXRpdmVfaTJjID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKGNvcmUpXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lMTBmOGM2MzNiNjhlY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xuQEAgLTAsMCAmIzQzOzEsMTcwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmVhbHRlay1wc2UtbWN1LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjb3JlIGhhcyBhbHJlYWR5IHdhaXRlZCBSVFBTRV9NQ1VfUkVTUE9OU0VfTVMgYmVmb3JlIGNhbGxpbmcgdXMsIHNvXG4mIzQzOyAqIHRoZSByZXNwb25zZSBpcyBub3JtYWxseSByZWFkeSBvbiB0aGUgdmVyeSBmaXJzdCByZWFkLiBGb3IgY29tbWFuZHMgdGhlXG4mIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbiYjNDM7ICogdXAgdG8gdGhlIHdvcnN0LWNhc2UgY2VpbGluZy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcdChSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUylcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdC8qIFNlbmQgb3Bjb2RlIGFzIFNNQnVzIGNvbW1hbmQgYnl0ZTsgcmVtYWluaW5nIDExIGJ5dGVzIGFzIGJsb2NrIGRhdGEgKi9cbiYjNDM7XHRyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLVx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSAmIzQzOyAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4mIzQzO1x0aW50IHRyaWVzLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRyaWVzIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRtc2xlZXAoUlRQU0VfTUNVX0kyQ19SRVRSWV9NUyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUNVIG5lZWRzIDB4MDAgYXMgY29tbWFuZCBieXRlIGZvciByZWFkICovXG4mIzQzO1x0XHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAodTggKilyZXNwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSBcdTAwMjZcdTAwMjYgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdHZvaWQgKmJ1ZjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBpMmNfbWFzdGVyX3NlbmQoKSBtYXkgRE1BLCBzbyB0aGUgYnVmZmVyIG11c3Qgbm90IGJlIG9uIHRoZSBzdGFjay4gKi9cbiYjNDM7XHRidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4mIzQzO1x0a2ZyZWUoYnVmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuJiM0MztcdGludCB0cmllcywgcmV0O1xuJiM0MztcdHU4ICpidWY7XG4mIzQzO1xuJiM0MztcdC8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqL1xuJiM0MztcdGJ1ZiA9IGttYWxsb2MoUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRyaWVzID0gMDsgdHJpZXMgXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0cmllcyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0aWYgKHJldCA9PSBSVFBTRV9NQ1VfTVNHX1NJWkUpIHtcbiYjNDM7XHRcdFx0bWVtY3B5KHJlc3AsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcbiYjNDM7XHRcdFx0aWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IC1FVElNRURPVVQ7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShidWYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzID0ge1xuJiM0MztcdC5zZW5kID0gcnRwc2VfbWN1X2kyY19uYXRpdmVfc2VuZCxcbiYjNDM7XHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhICptYXRjaDtcbiYjNDM7XHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcbiYjNDM7XHRib29sIHVzZV9uYXRpdmU7XG4mIzQzO1xuJiM0MztcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4mIzQzO1x0aWYgKCFtYXRjaClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgXCYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZyYW1pbmcgKHJhdyBJMkMgdnMgU01CdXMpIGlzIGNhcnJpZWQgYnkgdGhlIG1hdGNoIGRhdGEuICovXG4mIzQzO1x0dXNlX25hdGl2ZSA9IG1hdGNoLVx1MDAzZW5hdGl2ZV9pMmM7XG4mIzQzO1x0aWYgKHVzZV9uYXRpdmUpIHtcbiYjNDM7XHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVPUE5PVFNVUFAsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7cGxhaW4tSTJDIE1DVSBwcm90b2NvbCByZXF1aXJlcyBJMkMtY2FwYWJsZSBhZGFwdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXHUwMDNlYWRhcHRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLIHxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0spKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuJiM0MztcdFx0XHRcdFwmIzM0O1NNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHNlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBzZS1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1x0cHNlLVx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzQzO1x0cHNlLVx1MDAzZXRyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyBcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcdTAwMjZydHBzZV9tY3VfaTJjX3NtYnVzX29wcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3Rlcihwc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfaTJjX29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgfSxcbiYjNDM7XHR7IC8qIHNlbnRpbmVsICovIH1cbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X2kyY19vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRwc2VfbWN1X2kyY19kcml2ZXIgPSB7XG4mIzQzO1x0LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lXHRcdD0gXCYjMzQ7cmVhbHRlay1wc2UtbWN1LWkyY1wmIzM0OyxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZVx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2JlXHRcdD0gcnRwc2VfbWN1X2kyY19wcm9iZSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX2kyY19kcml2ZXIocnRwc2VfbWN1X2kyY19kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjliYWExN2Q4ZDMxZmEyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xuQEAgLTAsMCAmIzQzOzEsMTY0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcmRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JlYWx0ZWstcHNlLW1jdS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFx0MTkyMDBcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKDEwMClcbiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfY3RybCBwc2U7XG4mIzQzO1x0c3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldjtcbiYjNDM7XHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xuJiM0MztcdHNwaW5sb2NrX3QgcnhfbG9jaztcdFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cbiYjNDM7XHRzaXplX3QgcnhfbGVuO1xuJiM0MztcdHU4IHJ4X2J1ZltSVFBTRV9NQ1VfTVNHX1NJWkVdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSB0b19ydHBzZV9tY3VfdWFydChwKSAgY29udGFpbmVyX29mKHAsIHN0cnVjdCBydHBzZV9tY3VfdWFydCwgcHNlKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTm8gZnJhbWluZyBpcyBkb25lIGhlcmU6IGEgZ2xpdGNoZWQgZnJhbWUgY29zdHMgb25lIHRyYW5zYWN0aW9uLCB0aGVuXG4mIzQzOyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50XG4mIzQzOyAqIChub3QgdGFrZSksIGRyb3BwaW5nIGFueSBvdmVyZmxvdyBzbyBzZXJkZXYga2VlcHMgbm8gbGVmdG92ZXIgdG8gYmxlZWRcbiYjNDM7ICogaW50byB0aGUgbmV4dCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzaXplX3QgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7XG4mIzQzO1x0c2l6ZV90IHRha2U7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0dGFrZSA9IG1pbihjb3VudCwgc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpIC0gY3R4LVx1MDAzZXJ4X2xlbik7XG4mIzQzO1x0XHRpZiAodGFrZSkge1xuJiM0MztcdFx0XHRtZW1jcHkoY3R4LVx1MDAzZXJ4X2J1ZiAmIzQzOyBjdHgtXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlcnhfbGVuICYjNDM7PSB0YWtlO1xuJiM0MztcdFx0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiA9PSBzaXplb2YoY3R4LVx1MDAzZXJ4X2J1ZikpXG4mIzQzO1x0XHRcdFx0Y29tcGxldGUoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzZXJkZXZfZGV2aWNlX29wcyBydHBzZV9tY3VfdWFydF9zZXJkZXZfb3BzID0ge1xuJiM0MztcdC5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsXG4mIzQzO1x0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuJiM0MztcdGludCB3cml0dGVuO1xuJiM0MztcbiYjNDM7XHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjdHgtXHUwMDNlcnhfbG9jaykge1xuJiM0MztcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJ4X2xlbiA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXHUwMDNlc2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSxcbiYjNDM7XHRcdFx0XHQgICAgICBSVFBTRV9NQ1VfVUFSVF9UWF9USU1FT1VUKTtcbiYjNDM7XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB3cml0dGVuO1xuJiM0MztcdGlmICh3cml0dGVuICE9IHNpemVvZigqcmVxKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfdWFydF9yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSwgUlRQU0VfTUNVX1VBUlRfUlhfVElNRU9VVCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXJ4X2xlbiAhPSBzaXplb2YoKnJlc3ApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkocmVzcCwgY3R4LVx1MDAzZXJ4X2J1Ziwgc2l6ZW9mKCpyZXNwKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XG4mIzQzO1x0LnNlbmQgPSBydHBzZV9tY3VfdWFydF9zZW5kLFxuJiM0MztcdC5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbiYjNDM7e1xuJiM0MztcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzZXJkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4O1xuJiM0MztcdHVuc2lnbmVkIGludCBiYXVkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXNlcmRldiA9IHNlcmRldjtcbiYjNDM7XHRjdHgtXHUwMDNlcHNlLmRldiA9IGRldjtcbiYjNDM7XHRjdHgtXHUwMDNlcHNlLnBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzQzO1x0Y3R4LVx1MDAzZXBzZS50cmFuc3BvcnQgPSBcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xuJiM0MztcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNlcnhfZG9uZSk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9kcnZkYXRhKHNlcmRldiwgY3R4KTtcbiYjNDM7XHRzZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwgXHUwMDI2cnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fc2VyZGV2X2RldmljZV9vcGVuKGRldiwgc2VyZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBvcGVuIHNlcmRldlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksIFwmIzM0O2N1cnJlbnQtc3BlZWRcJiMzNDssIFx1MDAyNnNwZWVkKTtcbiYjNDM7XG4mIzQzO1x0YmF1ZCA9IHNlcmRldl9kZXZpY2Vfc2V0X2JhdWRyYXRlKHNlcmRldiwgc3BlZWQpO1xuJiM0MztcdGlmIChiYXVkICE9IHNwZWVkKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtjb3VsZCBub3Qgc2V0IGJhdWRyYXRlICV1LCBjb250cm9sbGVyIHVzZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBzcGVlZCwgYmF1ZCk7XG4mIzQzO1xuJiM0MztcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChzZXJkZXYsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2VyZGV2X2RldmljZV9zZXRfcGFyaXR5KHNlcmRldiwgU0VSREVWX1BBUklUWV9OT05FKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtjb3VsZCBub3Qgc2V0IHBhcml0eSB0byBub25lOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcihcdTAwMjZjdHgtXHUwMDNlcHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjFcJiMzNDssIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjFfZGF0YSB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMlwmIzM0OywgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfZ2VuMl9kYXRhIH0sXG4mIzQzO1x0eyAvKiBzZW50aW5lbCAqLyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9kcml2ZXIgcnRwc2VfbWN1X3VhcnRfZHJpdmVyID0ge1xuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O3JlYWx0ZWstcHNlLW1jdS11YXJ0XCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXG4mIzQzO1x0fSxcbiYjNDM7XHQucHJvYmUgID0gcnRwc2VfbWN1X3VhcnRfcHJvYmUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9zZXJkZXZfZGV2aWNlX2RyaXZlcihydHBzZV9tY3VfdWFydF9kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKb25hcyBKZWxvbmVrIFx1MDAzY2plbG9uZWsuam9uYXNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBhMzE5N2M5YzljZDFkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmhcbkBAIC0wLDAgJiM0MzsxLDg5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxuJiM0MzsjZGVmaW5lIF9SRUFMVEVLX1BTRV9NQ1VfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGltZSB0aGUgTUNVIGl0c2VsZiBuZWVkcyBiZXR3ZWVuIGFjY2VwdGluZyBhIHJlcXVlc3QgYW5kIGhhdmluZyBhXG4mIzQzOyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXG4mIzQzOyAqIHVuZGVybHlpbmcgdHJhbnNwb3J0OiB0aGUgY29yZSBwYWNlcyB0cmFuc2FjdGlvbnMgYnkgUlRQU0VfTUNVX1JFU1BPTlNFX01TXG4mIzQzOyAqIGFuZCBib3RoIHRyYW5zcG9ydHMgc2l6ZSB0aGVpciBwZXItdHJhbnNhY3Rpb24gcmVjdiBjZWlsaW5nIGZyb21cbiYjNDM7ICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xuJiM0MzsgKiBuZWVkaW5nIHVwIHRvIH4xcyB0byBwcm9kdWNlIGEgcmVwbHkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1x0XHRcdDI1XG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NU1x0XHQxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUb3RhbCB0aW1lIHRvIGtlZXAgcmV0cnlpbmcgdGhlIGZpcnN0IE1DVSByZWFkIGF0IHByb2JlLCBhbmQgdGhlIHBhdXNlXG4mIzQzOyAqIGJldHdlZW4gYXR0ZW1wdHMuIFJpZ2h0IGFmdGVyIGVuYWJsZS1ncGlvcyBpcyBhc3NlcnRlZCB0aGUgTUNVIG1heSBub3RcbiYjNDM7ICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcbiYjNDM7ICogZGVjbGFyaW5nIHRoZSBwcm9iZSBmYWlsZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcdFx0MzAwMFxuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9CT09UX1JFVFJZX01TXHRcdFx0MTAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVx0XHRcdDEyXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X21zZyB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHNlcV9udW07XG4mIzQzO1x0dTggcGF5bG9hZFs5XTtcbiYjNDM7XHR1OCBjaGVja3N1bTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1DVSBzdGF0dXMgb3Bjb2RlcyAoc2VlbiBvbiB0aGUgR2VuMSBkaWFsZWN0OyBHZW4yIG5ldmVyIGVtaXRzIHRoZW0pLlxuJiM0MzsgKiBJTkNPTVBMRVRFL0JBRF9DU1VNIGFyZSB0ZXJtaW5hbDsgTk9UX1JFQURZIGlzIHRyYW5zaWVudC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXHRcdDB4ZmRcdC8qIC1FQkFERSAgICovXG4mIzQzOyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTVx0XHQweGZlXHQvKiAtRUJBRE1TRyAqL1xuJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZXHRcdDB4ZmZcdC8qIC1FQUdBSU4gICovXG4mIzQzO1xuJiM0MzsvKiBBIHBvbGxpbmcgdHJhbnNwb3J0IGNhbiBzdG9wIGhlcmU6IHRoZSBtYXRjaGluZyByZXBseSwgb3IgYSB0ZXJtaW5hbCBlcnJvci4gKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZXNwLVx1MDAzZW9wY29kZSA9PSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4mIzQzO1x0ICAgICAgIHJlc3AtXHUwMDNlb3Bjb2RlID09IFJUUFNFX01DVV9PUENPREVfSU5DT01QTEVURSB8fFxuJiM0MztcdCAgICAgICByZXNwLVx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovXG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdDtcbiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm87XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybDtcbiYjNDM7XG4mIzQzOy8qIFBlci1jb21wYXRpYmxlIG1hdGNoIGRhdGEgKHRoZSBvZl9tYXRjaCAuZGF0YSkuICovXG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xuJiM0MztcdGJvb2wgbmF0aXZlX2kyYztcdC8qIHJhdy1JMkMgZnJhbWluZyAodnMgU01CdXMpOyBJMkMgdHJhbnNwb3J0IG9ubHkgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyB7XG4mIzQzO1x0aW50ICgqc2VuZCkoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpO1xuJiM0MztcdGludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybCB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XG4mIzQzO1x0c3RydWN0IG11dGV4IG11dGV4OyAvKiBzZXJpYWxpemVzIE1DVSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zYWN0aW9ucyAqL1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgKnRyYW5zcG9ydDtcbiYjNDM7XHR1OCBzZXE7XHRcdFx0Lyogcm9sbGluZyByZXF1ZXN0IHNlcV9udW0sIGVjaG9lZCBieSB0aGUgTUNVICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKTtcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjFfZGF0YTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMl9kYXRhO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhO1xuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDE6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OywKICAgICYjMzQ7U0VSSUFMX0RFVl9CVVMmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCBzdXBwb3J0aW5nIGJvdGggSTJDIGFuZCBVQVJUIHRyYW5zcG9ydHMuIFRoZSBkcml2ZXIgZXhwb3NlcyBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBuZXRsaW5rIGFuZCBwYXJzZXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2Ugb3ZlciBJMkMvVUFSVC4gSXQgY2FuIGJlIHByb2JlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3IgSTJDIHN5c2ZzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI4NmMyMTY2MjA1OWRhNDgxZTcxOWFiOWFkYWVhZTg3N2EwNjgxZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAwMToxNToxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wZjFhODE5ZGI0OWJiYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWwKQEAgLTAsMCAmIzQzOzEsMTgwIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFJlYWx0ZWsgUFNFIE1DVQomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkKJiM0MzsgIGhhcmR3YXJlIG9uIGEgcmFuZ2Ugb2YgbWFuYWdlZCBQb0Ugc3dpdGNoZXMuIFRoZSBob3N0IENQVSB0YWxrcyBvbmx5IHRvCiYjNDM7ICB0aGlzIE1DVSAtIG92ZXIgSTJDL1NNQnVzIG9yIFVBUlQgLSB1c2luZyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7CiYjNDM7ICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkCiYjNDM7ICBkaXJlY3RseS4gRm9yIGV4YW1wbGUsIG9uIHRoZSBaeXhlbCBHUzE5MDAtMTBIUCB0aGUgU29DIHJlYWNoZXMgdGhlIE1DVQomIzQzOyAgb3ZlciBVQVJULCBhbmQgdGhlIE1DVSBtYW5hZ2VzIHRoZSBvbi1ib2FyZCBQU0UgY2hpcC4KJiM0MzsKJiM0MzsgIFRoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIE1DVSB0b2dldGhlciB3aXRoIGl0cyBSZWFsdGVrIGZpcm13YXJlOiB0aGUKJiM0MzsgIGZpcm13YXJlIGFuZCBpdHMgaG9zdCBwcm90b2NvbCwgd2hpY2ggYXJlIHN0YWJsZSBhY3Jvc3MgYm9hcmRzLiBUaGUKJiM0MzsgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGUKJiM0MzsgIFBTRSBzaWxpY29uIGJlaGluZCB0aGUgTUNVIChSZWFsdGVrIFJUTDgyM3gvUlRMODIzOSogb3IgQnJvYWRjb20KJiM0MzsgIEJDTTU5eHh4KSBpcyByZXBvcnRlZCBieSB0aGUgTUNVIGFuZCBkZXRlY3RlZCBhdCBydW50aW1lIC0gbmVpdGhlciBpcwomIzQzOyAgbmFtZWQgaGVyZS4KJiM0MzsKJiM0MzsgIFR3byBwcm90b2NvbCBnZW5lcmF0aW9ucyBleGlzdCwgYm90aCBSZWFsdGVrJiMzOTtzOgomIzQzOyAgICBnZW4xICBvbGRlciBib2FyZHMsIHdoZXJlIHRoZSBNQ1UgZnJvbnRzIEJyb2FkY29tIFBTRSBzaWxpY29uCiYjNDM7ICAgIGdlbjIgIHRoZSBhbHRlcmVkIHByb3RvY29sIHVzZWQgd2l0aCBSZWFsdGVrJiMzOTtzIG93biBQU0Ugc2lsaWNvbgomIzQzOwomIzQzOyAgT24gYW4gSTJDIGF0dGFjaG1lbnQgdGhlIGZyYW1pbmcgdGhlIE1DVSBmaXJtd2FyZSBleHBlY3RzIGlzIHBhcnQgb2YgdGhlCiYjNDM7ICBjb21wYXRpYmxlOiAmIzM5Oy1zbWJ1cyYjMzk7IChyZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlIGFuZCBhIHJlcGVhdGVkCiYjNDM7ICBzdGFydCkgb3IgJiMzOTstaTJjJiMzOTsgKGJhcmUgYmxvY2sgd3JpdGVzIGFuZCByZWFkcykuIEEgVUFSVCBhdHRhY2htZW50IGNhcnJpZXMKJiM0MzsgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJiMzOTtzZXJpYWwmIzM5OyBub2RlLgomIzQzOwomIzQzOyAgRWFjaCBib2FyZCBhZGRpdGlvbmFsbHkgY2FycmllcyBhIGRldmljZS1zcGVjaWZpYyBjb21wYXRpYmxlIHRoYXQgZmFsbHMKJiM0MzsgIGJhY2sgdG8gb25lIG9mIHRoZSBwcm90b2NvbCBjb21wYXRpYmxlcyBhYm92ZS4gRHJpdmVycyBiaW5kIG9uIHRoZQomIzQzOyAgcHJvdG9jb2wgY29tcGF0aWJsZTsgdGhlIGRldmljZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZmllcyB0aGUgYm9hcmQgYW5kCiYjNDM7ICByZXNlcnZlcyBhIHBsYWNlIGZvciBhIGZ1dHVyZSBwZXItYm9hcmQgcXVpcmsgd2l0aG91dCBoYXZpbmcgdG8gcmV0cm9maXQKJiM0MzsgIGRldmljZSB0cmVlcyBhbHJlYWR5IGluIHRoZSBmaWVsZC4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgb25lT2Y6CiYjNDM7ICAgICAgIyBVQVJUCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1hMS1wc2UKJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjEKJiM0MzsKJiM0MzsgICAgICAjIEkyQywgU01CdXMgZnJhbWluZwomIzQzOyAgICAgIC0gaXRlbXM6CiYjNDM7ICAgICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTIwLTI0aHAtdjItcHNlCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzCiYjNDM7CiYjNDM7ICAgICAgIyBVQVJUCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1iMS1wc2UKJiM0MzsgICAgICAgICAgICAgIC0genl4ZWwseG1nMTkxNS0xMGVwLXBzZQomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMgomIzQzOwomIzQzOyAgICAgICMgSTJDLCBTTUJ1cyBmcmFtaW5nCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB6eXhlbCx4czE5MzAtMTJocC1wc2UKJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItc21idXMKJiM0MzsKJiM0MzsgICAgICAjIEkyQywgcmF3IGZyYW1pbmcKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIGxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZQomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHJlc2V0LWdwaW9zOgomIzQzOyAgICBkZXNjcmlwdGlvbjogUmVzZXQgbGluZSBvZiB0aGUgTUNVLgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgZGlzYWJsZS1wb3J0cy1ncGlvczoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgSGFyZHdhcmUgZ2F0ZSB0aGF0IGZvcmNlcyBhbGwgcG9ydHMgaW50byBhZG1pbi1kaXNhYmxlZCBzdGF0ZSB3aGlsZQomIzQzOyAgICAgIGFzc2VydGVkLgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjCiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NlcmlhbC9zZXJpYWwtcGVyaXBoZXJhbC1wcm9wcy55YW1sIwomIzQzOyAgIyBBICYjMzk7LXNtYnVzJiMzOTsvJiMzOTstaTJjJiMzOTsgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICYjMzk7cmVnJiMzOTsgYW5kCiYjNDM7ICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlQKJiM0MzsgICMgYXR0YWNobWVudDogbm8gJiMzOTtyZWcmIzM5OywgdGhlIHRyYW5zcG9ydCBjb21lcyBmcm9tIHRoZSBwYXJlbnQgc2VyaWFsIG5vZGUuCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1cwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmMKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gcmVnCiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlCiYjNDM7ICAgICAgICBtYXgtc3BlZWQ6IGZhbHNlCiYjNDM7ICAgIGVsc2U6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIHJlZzogZmFsc2UKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudAomIzQzOyAgLSB8CiYjNDM7ICAgIGkyYyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt6eXhlbCx4czE5MzAtMTJocC1wc2UmIzM0OywgJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1cyYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDIwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBwc2UtcGlzIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50CiYjNDM7ICAtIHwKJiM0MzsgICAgaTJjIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBldGhlcm5ldC1wc2VAMjAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2xpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZSYjMzQ7LCAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyYyYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDIwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBwc2UtcGlzIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgIyBVQVJUIGF0dGFjaG1lbnQKJiM0MzsgIC0gfAomIzQzOyAgICBzZXJpYWwgewomIzQzOyAgICAgICAgZXRoZXJuZXQtcHNlIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt6eXhlbCxnczE5MDAtMTBocC1hMS1wc2UmIzM0OywgJiMzNDtyZWFsdGVrLHBzZS1tY3UtZ2VuMSYjMzQ7OwomIzQzOyAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSAmbHQ7MTkyMDAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBzZS1waXMgewomIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIHBzZS1waUAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDYwY2ZmMDA5NTNkY2JlLi4xNjEzNmFjMTFlMDYzNyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIyNzM2LDYgJiM0MzsyMjczNiwxMyBAQCBTOglNYWludGFpbmVkCiBGOglpbmNsdWRlL3NvdW5kL3J0Ki5oCiBGOglzb3VuZC9zb2MvY29kZWNzL3J0KgogCiYjNDM7UkVBTFRFSyBQU0UgTUNVIERSSVZFUgomIzQzO006CUpvbmFzIEplbG9uZWsgJmx0O2plbG9uZWsuam9uYXNAZ21haWwuY29tJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbAomIzQzO0Y6CWRyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UqCiYjNDM7CiBSRUFMVEVLIE9UVE8gV0FUQ0hET0cKIE06CVNhbmRlciBWYW5oZXVsZSAmbHQ7c2FuZGVyQHN2YW5oZXVsZS5uZXQmZ3Q7CiBMOglsaW51eC13YXRjaGRvZ0B2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcKaW5kZXggN2VmMjk2NTdlZTVkZDEuLmEwZjJhZTY2OGM2N2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZwpAQCAtMTMsNiAmIzQzOzEzLDM0IEBAIG1lbnVjb25maWcgUFNFX0NPTlRST0xMRVIKIAogaWYgUFNFX0NPTlRST0xMRVIKIAomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1UKJiM0MzsJdHJpc3RhdGUKJiM0MzsJaGVscAomIzQzOwkgIFNoYXJlZCBjb3JlIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVIGRyaXZlci4gVGhpcyBpcyBzZWxlY3RlZAomIzQzOwkgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LgomIzQzOwomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDCiYjNDM7CXRyaXN0YXRlICYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydCkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEkyQwomIzQzOwlzZWxlY3QgUFNFX1JFQUxURUtfTUNVCiYjNDM7CWhlbHAKJiM0MzsJICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRQomIzQzOwkgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZAomIzQzOwkgIHZpYSBJMkMvU01CdXMuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwKJiM0MzsJICBQU0Ugc2lsaWNvbiBpcyBub3QgYWNjZXNzZWQgZGlyZWN0bHkuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYQomIzQzOwkgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLgomIzQzOwomIzQzO2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfVUFSVAomIzQzOwl0cmlzdGF0ZSAmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVMKJiM0MzsJc2VsZWN0IFBTRV9SRUFMVEVLX01DVQomIzQzOwloZWxwCiYjNDM7CSAgRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIHRoYXQgZnJvbnRzIHRoZSBQU0UKJiM0MzsJICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWQKJiM0MzsJICB2aWEgVUFSVC4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbCBQU0UKJiM0MzsJICBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhCiYjNDM7CSAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LgomIzQzOwogY29uZmlnIFBTRV9SRUdVTEFUT1IKIAl0cmlzdGF0ZSAmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlciYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlCmluZGV4IGNjNzhmN2VhN2Y1ZjcxLi45Y2NhNTkwMGZlMzQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZQpAQCAtMyw2ICYjNDM7Myw5IEBACiAKIG9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgJiM0Mzs9IHBzZV9jb3JlLm8KIAomIzQzO29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1UpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtY29yZS5vCiYjNDM7b2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVV9JMkMpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtaTJjLm8KJiM0MztvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX1VBUlQpICYjNDM7PSByZWFsdGVrLXBzZS1tY3UtdWFydC5vCiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgJiM0Mzs9IHBzZV9yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSAmIzQzOz0gcGQ2OTJ4MC5vCiBvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgJiM0Mzs9IHNpMzQ3NC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MjA0Y2I0MzBmZmVhOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jCkBAIC0wLDAgJiM0MzsxLDk4OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUFNFIHNpbGljb24gb24gdmFyaW91cwomIzQzOyAqIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcy4gVGhlIE1DVSBzcGVha3MgYSAxMi1ieXRlIGZpeGVkLWZyYW1lCiYjNDM7ICogbWFuYWdlbWVudCBwcm90b2NvbDsgdGhpcyBkcml2ZXIgY292ZXJzIHR3byBnZW5lcmF0aW9ucyBvZiB0aGUKJiM0MzsgKiBwcm90b2NvbCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGUgdGFibGUgYW5kIHJlc3BvbnNlIHBhcnNlcnMuCiYjNDM7ICoKJiM0MzsgKiBNYW55IFBvRSBzd2l0Y2ggZGVzaWducyBwdXQgYSBkZWRpY2F0ZWQgbWljcm9jb250cm9sbGVyIGluIGZyb250IG9mIHRoZQomIzQzOyAqIGFjdHVhbCBQU0Ugc2lsaWNvbjogdGhlIGhvc3QgQ1BVIHRhbGtzIHRvIHRoZSBNQ1Ugb3ZlciBJMkMvU01CdXMgb3IKJiM0MzsgKiBVQVJULCBhbmQgdGhlIE1DVSBpbiB0dXJuIG1hbmFnZXMgdGhlIFBTRSBjaGlwcyBvbiB0aGUgYm9hcmQuIFRoZSBNQ1UKJiM0MzsgKiBzcGVha3MgYSBzbWFsbCBtZXNzYWdlLWJhc2VkIHByb3RvY29sLiBUaGUgUFNFIGNoaXBzIHRoZW1zZWx2ZXMgYXJlIG5vdAomIzQzOyAqIGFjY2Vzc2VkIGRpcmVjdGx5OyBldmVyeXRoaW5nIGdvZXMgdGhyb3VnaCBNQ1UgY29tbWFuZHMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGRyaXZlciB0YXJnZXRzIHRoYXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgUmVhbHRlay1mYW1pbHkgcHJvdG9jb2wuCiYjNDM7ICogVHdvIGdlbmVyYXRpb25zIGFyZSBzdXBwb3J0ZWQ6IEdlbjEgYmVpbmcgdXNlZCBvbiBvbGRlciBzd2l0Y2hlcyB3aGVyZQomIzQzOyAqIHRoZSBNQ1UgZnJvbnRzIGFuZCBtYW5hZ2VzIEJyb2FkY29tIFBTRSBzaWxpY29uOyBHZW4yIGJlaW5nIHVzZWQgd2l0aAomIzQzOyAqIFJlYWx0ZWsgUFNFIHNpbGljb24uIFRoZSB0d28gc2hhcmUgZnJhbWUgZm9ybWF0IGFuZCBhIHN1bS1tb2QtMjU2CiYjNDM7ICogY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnMgYW5kIG9uIGEgZmV3IHJlc3BvbnNlIGxheW91dHM7CiYjNDM7ICogdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwZXItZGlhbGVjdCBvcGNvZGUgdGFibGUgYW5kIHBhcnNlciBob29rcy4KJiM0MzsgKgomIzQzOyAqIE91dCBvZiBzY29wZTogUFNFIGNoaXBzIHRoYXQgYXJlIGludGVyZmFjZWQgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdAomIzQzOyAqIHdpdGhvdXQgYSBtYW5hZ2VtZW50IE1DVSwgTUNVIGRlc2lnbnMgdGhhdCBzcGVhayBhbiB1bnJlbGF0ZWQgcHJvdG9jb2wKJiM0MzsgKiBmYW1pbHksIGFuZCAmIzM0O2R1bWIgUFNFJiMzNDsgbW9kZXMgd2hlcmUgbm8gaG9zdCBjb250cm9sIGlzIHdpcmVkIHVwIGF0IGFsbC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgY29yZSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wsIGRlY29kaW5nL2VuY29kaW5nIG9mIE1DVQomIzQzOyAqIHJlc3BvbnNlcywgYW5kIHRoZSBwc2VfY29udHJvbGxlcl9vcHMgaW50ZWdyYXRpb24uIFRyYW5zcG9ydCBtb2R1bGVzCiYjNDM7ICogKHJlYWx0ZWstcHNlLW1jdS1pMmMsIHJlYWx0ZWstcHNlLW1jdS11YXJ0KSBwcm92aWRlIHRoZSBzZW5kL3JlY3YKJiM0MzsgKiBjYWxsYmFja3MuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2dwaW8vY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvamlmZmllcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taW5tYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtyZWFsdGVrLXBzZS1tY3UuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCCQkweDAxMzgKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOQkJMHgwMDM5CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDCQkweDAxMzkKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEJCTB4ZTExMQomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMQkJMHhlMTIxCiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQJCTB4MDAKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkcJCTB4MDEKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HCQkweDAyCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVAkJCTB4MDMJLyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQJCTB4MDQKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVAkJMHgwNQkvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HCQkweDA2CiYjNDM7CiYjNDM7LyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIJMHgwMgomIzQzOwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUUwkJCTQ4CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkJCTMKJiM0MzsKJiM0MztlbnVtIHJ0cHNlX21jdV9jbWQgewomIzQzOwlSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEUsCiYjNDM7CVJUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPLAomIzQzOwlSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLAomIzQzOwomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZLAomIzQzOwlSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVUywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUUywKJiM0MzsJUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUcsCiYjNDM7CVJUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJRywKJiM0MzsKJiM0MzsJUlRQU0VfTUNVX05VTV9DTURTLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgewomIzQzOwl1OCBvcDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKQl7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH0KJiM0MzsKJiM0MzsvKiBQYXJzZWQgTUNVIHJlc3BvbnNlIHN0cnVjdHVyZXMgKGRlY29kZWQgZnJvbSBydHBzZV9tY3VfbXNnIHJlcGxpZXMpICovCiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9pbmZvIHsKJiM0MzsJdTggbWF4X3BvcnRzOwomIzQzOwlib29sIHN5c3RlbV9lbmFibGU7CiYjNDM7CXUxNiBkZXZpY2VfaWQ7CiYjNDM7CXU4IHN3X3ZlcjsKJiM0MzsJdTggbWN1X3R5cGU7CiYjNDM7CXU4IGNvbmZpZ19zdGF0dXM7CiYjNDM7CXU4IGV4dF92ZXI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X2V4dF9jb25maWcgewomIzQzOwl1OCB1dmxvOwomIzQzOwl1OCBvdmxvOwomIzQzOwlib29sIHByZWFsbG9jX2VuYWJsZTsKJiM0MzsJdTggbnVtX29mX3BzZXM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHsKJiM0MzsJdTggc3RzMTsKJiM0MzsJdTggc3RzMjsKJiM0MzsJdTggc3RzMzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7CiYjNDM7CXUxNiB2b2x0YWdlX3JhdzsJLyogNjQuNDVtVi9MU0IgKi8KJiM0MzsJdTE2IGN1cnJlbnRfcmF3OwkvKiAxbUEvTFNCICovCiYjNDM7CXUxNiB0ZW1wZXJhdHVyZV9yYXc7CS8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovCiYjNDM7CXUxNiBwb3dlcl9yYXc7CQkvKiAxMDBtVy9MU0IgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgewomIzQzOwlib29sIGVuYWJsZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIHsKJiM0MzsJdTggbWF4X3Bvd2VyOwomIzQzOwl1OCBwcmlvcml0eTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCB7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIG9wY29kZVtSVFBTRV9NQ1VfTlVNX0NNRFNdOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2gKJiM0MzsJICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlCiYjNDM7CSAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssCiYjNDM7CSAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS4KJiM0MzsJICovCiYjNDM7CXZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7CiYjNDM7CWludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7CiYjNDM7CWNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwl1MTYgZGV2aWNlX2lkOwomIzQzOwl1MzIgbWF4X21XX3Blcl9wb3J0OwomIzQzOwllbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDsJLyogY29tbWFuZCB1c2VkIGJ5IHNldF9wd19saW1pdCAqLwomIzQzOwl1MzIgcHdfc2V0X2xzYl9tVzsJCS8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqLwomIzQzOwl1MzIgcHdfcmVhZF9sc2JfbVc7CQkvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7CiYjNDM7CS5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCLAomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtSVEw4MjM4QiYjMzQ7LAomIzQzOwkucHdfcmVhZF9sc2JfbVcgPSAyMDAsCiYjNDM7CS5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSAyMDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5LAomIzQzOwkubWF4X21XX3Blcl9wb3J0ID0gOTAwMDAsCiYjNDM7CS5uYW1lID0gJiMzNDtSVEw4MjM5JiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDQwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSA0MDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O1JUTDgyMzlDJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDQwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCwKJiM0MzsJLnB3X3NldF9sc2JfbVcgPSA0MDAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHsKJiM0MzsJLmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTEsCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O0JDTTU5MTExJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDIwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDIwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0gewomIzQzOwkuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTEyMSwKJiM0MzsJLyoKJiM0MzsJICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXQKJiM0MzsJICogYW5kIHRoZSBHZW4xIGRpYWxlY3QgaGFzIG9ubHkgdGhlIDgtYml0LzAuMlcgc2V0IGNvbW1hbmQgKCZsdDs9NTFXKTsKJiM0MzsJICogY2FwIGF0IHRoZSAzMFcgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IG9mZmVycy4KJiM0MzsJICovCiYjNDM7CS5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCwKJiM0MzsJLm5hbWUgPSAmIzM0O0JDTTU5MTIxJiMzNDssCiYjNDM7CS5wd19yZWFkX2xzYl9tVyA9IDIwMCwKJiM0MzsJLnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULAomIzQzOwkucHdfc2V0X2xzYl9tVyA9IDIwMCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEhlbHBlcnMgYW5kIGJhc2ljIGZ1bmN0aW9ucyAqLwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnRvX3J0cHNlX21jdV9jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpCiYjNDM7ewomIzQzOwltZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpOwomIzQzOwltc2ctJmd0O29wY29kZSA9IG9wY29kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU4IHJ0cHNlX21jdV9jaGVja3N1bShjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJdTggc3VtID0gMDsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbi0tKQomIzQzOwkJc3VtICYjNDM7PSAqYnVmJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIHN1bTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZG9feGZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3BzZS0mZ3Q7bXV0ZXgpIHsKJiM0MzsJCS8qIFJvbGxpbmcgc2VxX251bSBzbyBhIGxhdGUgcmVwbHkgY2FuJiMzOTt0IHBhc3MgYXMgYSBsYXRlciBvbmUuICovCiYjNDM7CQlyZXEtJmd0O3NlcV9udW0gPSBwc2UtJmd0O3NlcSYjNDM7JiM0Mzs7CiYjNDM7CQlyZXEtJmd0O2NoZWNrc3VtID0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlcSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSk7CiYjNDM7CiYjNDM7CQlyZXQgPSBwc2UtJmd0O3RyYW5zcG9ydC0mZ3Q7c2VuZChwc2UsIHJlcSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdAomIzQzOwkJICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG8KJiM0MzsJCSAqIHVzLiBQYWNlIHRoZSB0cmFuc2FjdGlvbiBoZXJlIHNvIGVhY2ggdHJhbnNwb3J0IGNhbiBrZWVwIGl0cyByZWN2CiYjNDM7CQkgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS4KJiM0MzsJCSAqLwomIzQzOwkJbXNsZWVwKFJUUFNFX01DVV9SRVNQT05TRV9NUyk7CiYjNDM7CiYjNDM7CQltZW1zZXQocmVzcCwgMCwgc2l6ZW9mKCpyZXNwKSk7CiYjNDM7CQlyZXQgPSBwc2UtJmd0O3RyYW5zcG9ydC0mZ3Q7cmVjdihwc2UsIHJlcSwgcmVzcCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IGhhcm1sZXNzCiYjNDM7CSAqIHRvIGNoZWNrIGZvciBHZW4yIHRvbykuIENhdGNoIHRoZXNlIGJlZm9yZSB0aGUgZ2VuZXJpYyBvcGNvZGUvQ1JDCiYjNDM7CSAqIG1pc21hdGNoIHBhdGggc28gY2FsbGVycyBzZWUgYSBtZWFuaW5nZnVsIGVycm5vLgomIzQzOwkgKi8KJiM0MzsJc3dpdGNoIChyZXNwLSZndDtvcGNvZGUpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEU6CiYjNDM7CQlyZXR1cm4gLUVCQURFOwomIzQzOwljYXNlIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU06CiYjNDM7CQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX09QQ09ERV9OT1RfUkVBRFk6CiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmVzcC0mZ3Q7b3Bjb2RlICE9IHJlcS0mZ3Q7b3Bjb2RlIHx8CiYjNDM7CSAgICByZXNwLSZndDtzZXFfbnVtICE9IHJlcS0mZ3Q7c2VxX251bSB8fAomIzQzOwkgICAgcmVzcC0mZ3Q7Y2hlY2tzdW0gIT0gcnRwc2VfbWN1X2NoZWNrc3VtKCh1OCAqKXJlc3AsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpKQomIzQzOwkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9xdWVyeShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwKJiM0MzsJCQkJc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3Bjb2RlKTsKJiM0MzsJcmVxLnBheWxvYWRbMF0gPSBwb3J0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCByZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNwLSZndDtwYXlsb2FkWzBdICE9IHBvcnQpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfY21kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLCB1OCBhcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3Bjb2RlKTsKJiM0MzsJcmVxLnBheWxvYWRbMF0gPSBwb3J0OwomIzQzOwlyZXEucGF5bG9hZFsxXSA9IGFyZzsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCAmYW1wO3JlcSwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogR2xvYmFsIG9wZXJhdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfaW5mbyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydHBzZV9tY3VfbXNnX2luaXQoJmFtcDtyZXEsIG9wYy0mZ3Q7b3ApOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9zeXN0ZW1faW5mbyhyZXNwLnBheWxvYWQsIGluZm8pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3BjLSZndDtvcCk7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgJmFtcDtyZXEsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwljb25maWctJmd0O3V2bG8gPSByZXNwLnBheWxvYWRbMF07CiYjNDM7CWNvbmZpZy0mZ3Q7b3ZsbyA9IHJlc3AucGF5bG9hZFs1XTsKJiM0MzsJY29uZmlnLSZndDtwcmVhbGxvY19lbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDB4MSk7CiYjNDM7CWNvbmZpZy0mZ3Q7bnVtX29mX3BzZXMgPSByZXNwLnBheWxvYWRbNl07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0cHNlX21jdV9tc2dfaW5pdCgmYW1wO3JlcSwgb3BjLSZndDtvcCk7CiYjNDM7CXJlcS5wYXlsb2FkWzBdID0gZW5hYmxlID8gMHgxIDogMHgwOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsICZhbXA7cmVxLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIChyZXNwLnBheWxvYWRbMF0gPT0gMHgwKSA/IDAgOiAtRUlPOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQb3J0IG9wZXJhdGlvbnMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN0YXR1cy0mZ3Q7c3RzMSA9IHJlc3AucGF5bG9hZFsxXTsKJiM0MzsJc3RhdHVzLSZndDtzdHMyID0gcmVzcC5wYXlsb2FkWzJdOwomIzQzOwlzdGF0dXMtJmd0O3N0czMgPSByZXNwLnBheWxvYWRbM107CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCQkgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLSZndDtvcCwgJmFtcDtyZXNwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW1lYXN1cmVtZW50LSZndDt2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFsxXSk7CiYjNDM7CW1lYXN1cmVtZW50LSZndDtjdXJyZW50X3JhdyA9IGdldF91bmFsaWduZWRfYmUxNigmYW1wO3Jlc3AucGF5bG9hZFszXSk7CiYjNDM7CW1lYXN1cmVtZW50LSZndDt0ZW1wZXJhdHVyZV9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtyZXNwLnBheWxvYWRbNV0pOwomIzQzOwltZWFzdXJlbWVudC0mZ3Q7cG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cmVzcC5wYXlsb2FkWzddKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107CiYjNDM7CWlmICghb3BjLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtJmd0O29wLCAmYW1wO3Jlc3ApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDtlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsCiYjNDM7CQkJCQkgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9wYyA9ICZhbXA7cHNlLSZndDtkaWFsZWN0LSZndDtvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy0mZ3Q7b3AsICZhbXA7cmVzcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwljb25maWctJmd0O21heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTsKJiM0MzsJY29uZmlnLSZndDtwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjOwomIzQzOwomIzQzOwlvcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9FTkFCTEVdOwomIzQzOwlpZiAoIW9wYy0mZ3Q7dmFsaWQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBwb3J0LCBvcGMtJmd0O29wLCBlbmFibGUgPyAweDEgOiAweDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQU0UgY29udHJvbGxlciBvcHMgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfY29uZmlnIGNvbmZpZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhwc2UsIGlkLCAmYW1wO2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlhZG1pbl9zdGF0ZS0mZ3Q7YzMzX2FkbWluX3N0YXRlID0gY29uZmlnLmVuYWJsZSA/IEVUSFRPT0xfQzMzX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEIDoKJiM0MzsJCQkJCQkgICAgICAgRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsCiYjNDM7CQkJCQlzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc3RhdHVzLnN0czEpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6CiYjNDM7CQlwd19zdGF0dXMtJmd0O2MzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRElTQUJMRUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOgomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfVEVTVDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19URVNUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOgomIzQzOwkJcHdfc3RhdHVzLSZndDtjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXB3X3N0YXR1cy0mZ3Q7YzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19VTktOT1dOOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgJmFtcDtzdGF0dXMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogc3RzMiBob2xkcyB0aGUgY2xhc3Mgb25seSBpbiB0aGUgb3BlcmF0aW9uYWwgc3RhdGVzIGJlbG93LiBJbiBhCiYjNDM7CSAqIGZhdWx0L3Rlc3Qgc3RhdGUgKG9yIGEgY29kZSByZXNlcnZlZCBvbiB0aGUgY3VycmVudCBkaWFsZWN0KSBpdAomIzQzOwkgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpcwomIzQzOwkgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBjbGFzcy0wIFBEOyB1c2Vyc3BhY2UgZGlzYW1iaWd1YXRlcwomIzQzOwkgKiB2aWEgdGhlIHBvd2VyIHN0YXR1cy4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAoc3RhdHVzLnN0czEpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6CiYjNDM7CWNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzoKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElORzoKJiM0MzsJCXJldHVybiBwc2UtJmd0O2RpYWxlY3QtJmd0O3BhcnNlX3BvcnRfY2xhc3MoJmFtcDtzdGF0dXMpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgJmFtcDttZWFzdXJlbWVudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiAxMDBtVyBwZXIgTFNCICovCiYjNDM7CXJldHVybiBtZWFzdXJlbWVudC5wb3dlcl9yYXcgKiAxMDBVOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50OwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MzIgdVY7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCAmYW1wO21lYXN1cmVtZW50KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIDY0LjQ1bVYgcGVyIExTQiAqLwomIzQzOwl1ViA9IG1lYXN1cmVtZW50LnZvbHRhZ2VfcmF3ICogNjQ0NTBVOwomIzQzOwlyZXR1cm4gbWluX3QodTMyLCB1ViwgSU5UX01BWCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcocHNlLCBpZCwgJmFtcDtjb25maWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvbmZpZy5tYXhfcG93ZXIgKiBwc2UtJmd0O2NoaXAtJmd0O3B3X3JlYWRfbHNiX21XOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCBpbnQgbWF4X21XKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYzsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwID0gcHNlLSZndDtjaGlwOwomIzQzOwl1OCBwcmdfdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAobWF4X21XICZsdDsgMCB8fCBtYXhfbVcgJmd0OyBjaGlwLSZndDttYXhfbVdfcGVyX3BvcnQpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJdHlwZV9vcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07CiYjNDM7CXZhbF9vcGMgPSAmYW1wO3BzZS0mZ3Q7ZGlhbGVjdC0mZ3Q7b3Bjb2RlW2NoaXAtJmd0O3B3X3NldF9jbWRdOwomIzQzOwkvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovCiYjNDM7CWlmICghdHlwZV9vcGMtJmd0O3ZhbGlkIHx8ICF2YWxfb3BjLSZndDt2YWxpZCB8fCAhY2hpcC0mZ3Q7cHdfc2V0X2xzYl9tVykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3dpdGNoIHRoZSBwb3J0IHRvIHVzZXItZGVmaW5lZCBsaW1pdCBtb2RlIGZpcnN0LCB0aGVuIHByb2dyYW0gdGhlCiYjNDM7CSAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpbgomIzQzOwkgKiB1c2VyLWRlZmluZWQgbW9kZSBidXQgd2l0aCB0aGUgcHJldmlvdXMgbGltaXQgdmFsdWU7IHRoZSBuZXh0CiYjNDM7CSAqIHN1Y2Nlc3NmdWwgc2V0X3B3X2xpbWl0IGNhbGwgcmVjb3ZlcnMgaXQuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdHlwZV9vcGMtJmd0O29wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcHJnX3ZhbCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X21XIC8gY2hpcC0mZ3Q7cHdfc2V0X2xzYl9tVywgVThfTUFYKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCB2YWxfb3BjLSZndDtvcCwgcHJnX3ZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLAomIzQzOwkJCQkJICAgICAgc3RydWN0IHBzZV9wd19saW1pdF9yYW5nZXMgKm91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX3B3X2xpbWl0X3JhbmdlICpyYW5nZTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJhbmdlWzBdLm1pbiA9IDA7CiYjNDM7CXJhbmdlWzBdLm1heCA9IHBzZS0mZ3Q7Y2hpcC0mZ3Q7bWF4X21XX3Blcl9wb3J0OwomIzQzOwomIzQzOwlvdXQtJmd0O2MzM19wd19saW1pdF9yYW5nZXMgPSByYW5nZTsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsICZhbXA7Y29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBjb25maWcucHJpb3JpdHk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYzsKJiM0MzsKJiM0MzsJaWYgKHByaW8gJmd0OyBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFkpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJb3BjID0gJmFtcDtwc2UtJmd0O2RpYWxlY3QtJmd0O29wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXTsKJiM0MzsJaWYgKCFvcGMtJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy0mZ3Q7b3AsIHByaW8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0gewomIzQzOwkucGlfZ2V0X2FkbWluX3N0YXRlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlLAomIzQzOwkucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsCiYjNDM7CS5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsCiYjNDM7CS5waV9nZXRfYWN0dWFsX3B3ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdywKJiM0MzsJLnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSwKJiM0MzsJLnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLAomIzQzOwkucGlfZ2V0X3ZvbHRhZ2UgPSBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSwKJiM0MzsJLnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCwKJiM0MzsJLnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCwKJiM0MzsJLnBpX2dldF9wd19saW1pdF9yYW5nZXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzLAomIzQzOwkucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbywKJiM0MzsJLnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIGV4dF9jb25maWc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgYm9vdGluZyBNQ1UgbWF5IHN0YXkgc2lsZW50ICgtRVRJTUVET1VUKSwgbm90IEFDSyBpdHMgYWRkcmVzcwomIzQzOwkgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGEKJiM0MzsJICogY29ycnVwdC9wYXJ0aWFsIGZyYW1lICgtRUJBRE1TRyAvIC1FQkFERSkuIFJldHJ5IHRob3NlIHdpdGhpbiBhCiYjNDM7CSAqIGJvdW5kZWQgd2luZG93OyBvdGhlciBlcnJvcnMgKGUuZy4gLUVPUE5PVFNVUFApIGFyZSBmYXRhbCBhbmQgZmFpbAomIzQzOwkgKiBpbW1lZGlhdGVseS4KJiM0MzsJICovCiYjNDM7CWRlYWRsaW5lID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVMpOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBydHBzZV9tY3VfZ2V0X2luZm8ocHNlLCBpbmZvKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVUSU1FRE9VVCAmYW1wOyZhbXA7IHJldCAhPSAtRU5YSU8gJmFtcDsmYW1wOyByZXQgIT0gLUVSRU1PVEVJTyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmV0ICE9IC1FQUdBSU4gJmFtcDsmYW1wOyByZXQgIT0gLUVCQURNU0cgJmFtcDsmYW1wOyByZXQgIT0gLUVCQURFKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJbXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGluZm9cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChpbmZvLSZndDtkZXZpY2VfaWQpIHsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM4Yl9pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM5X2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDOgomIzQzOwkJcHNlLSZndDtjaGlwID0gJmFtcDtydGw4MjM5Y19pbmZvOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMToKJiM0MzsJCXBzZS0mZ3Q7Y2hpcCA9ICZhbXA7YmNtNTkxMTFfaW5mbzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6CiYjNDM7CQlwc2UtJmd0O2NoaXAgPSAmYW1wO2JjbTU5MTIxX2luZm87CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRUlOVkFMLCAmIzM0O3Vua25vd24gUFNFIGlkIDB4JXhcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGluZm8tJmd0O2RldmljZV9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDttYXhfcG9ydHMgfHwgaW5mby0mZ3Q7bWF4X3BvcnRzICZndDsgUlRQU0VfTUNVX01BWF9QT1JUUykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgICYjMzQ7TUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XG4mIzM0OywgaW5mby0mZ3Q7bWF4X3BvcnRzKTsKJiM0MzsKJiM0MzsJcmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgJmFtcDtleHRfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZGV2X2luZm8ocHNlLSZndDtkZXYsICYjMzQ7JXMgTUNVLCAlcyAoaWQgMHglMDR4KSwgJXUgcG9ydHMgYWNyb3NzICV1IFBTRSBjaGlwKHMpXG4mIzM0OywKJiM0MzsJCSBwc2UtJmd0O2RpYWxlY3QtJmd0O21jdV90eXBlX3N0cihpbmZvLSZndDttY3VfdHlwZSksIHBzZS0mZ3Q7Y2hpcC0mZ3Q7bmFtZSwKJiM0MzsJCSBpbmZvLSZndDtkZXZpY2VfaWQsIGluZm8tJmd0O21heF9wb3J0cywgZXh0X2NvbmZpZy5udW1fb2ZfcHNlcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTsKJiM0MzsKJiM0MzsJcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoOwomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gaW5mbzsKJiM0MzsJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2Q7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fbXV0ZXhfaW5pdChwc2UtJmd0O2RldiwgJmFtcDtwc2UtJmd0O211dGV4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFtYXRjaCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCAtRU5PREVWLCAmIzM0O21pc3NpbmcgbWF0Y2ggZGF0YVxuJiMzNDspOwomIzQzOwlwc2UtJmd0O2RpYWxlY3QgPSBtYXRjaC0mZ3Q7ZGlhbGVjdDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2F0Y2ggYSBkaWFsZWN0IHRoYXQgZm9yZ290IHRvIHNldCBvbmUgb2YgdGhlIHJlcXVpcmVkIGhvb2tzIGF0CiYjNDM7CSAqIHByb2JlIHRpbWUsIHJhdGhlciB0aGFuIE5VTEwtZGVyZWYmIzM5O2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwc2UtJmd0O2RpYWxlY3QgfHwKJiM0MzsJICAgICFwc2UtJmd0O2RpYWxlY3QtJmd0O3BhcnNlX3N5c3RlbV9pbmZvIHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDtwYXJzZV9wb3J0X2NsYXNzIHx8CiYjNDM7CSAgICAhcHNlLSZndDtkaWFsZWN0LSZndDttY3VfdHlwZV9zdHIpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O2RpYWxlY3QgZm9yIGNoaXAgaXMgaW5jb21wbGV0ZVxuJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWxlYXNlIHRoZSBNQ1UgZnJvbSByZXNldCBiZWZvcmUgdGhlIGZpcnN0IHRyYW5zYWN0aW9uOyB0aGUKJiM0MzsJICogYm9vdC1yZXRyeSBsb29wIGluIGRpc2NvdmVyKCkgd2FpdHMgZm9yIGl0IHRvIGFuc3dlci4KJiM0MzsJICovCiYjNDM7CWdwaW9kID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLSZndDtkZXYsICYjMzQ7cmVzZXQmIzM0OywgR1BJT0RfT1VUX0xPVyk7CiYjNDM7CWlmIChJU19FUlIoZ3Bpb2QpKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLSZndDtkZXYsIFBUUl9FUlIoZ3Bpb2QpLAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGdldCByZXNldCBncGlvXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNvbWUgYm9hcmRzIGdhdGUgYWxsIHBvcnRzIHRocm91Z2ggYSBoYXJkd2FyZSBsaW5lOyBkZWFzc2VydCBpdCBzbwomIzQzOwkgKiB0aGUgTUNVIHByb3RvY29sIGdvdmVybnMgcGVyLXBvcnQgYWRtaW4gc3RhdGUgZnJvbSBoZXJlIG9uLgomIzQzOwkgKi8KJiM0MzsJZ3Bpb2QgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtJmd0O2RldiwgJiMzNDtkaXNhYmxlLXBvcnRzJiMzNDssIEdQSU9EX09VVF9MT1cpOwomIzQzOwlpZiAoSVNfRVJSKGdwaW9kKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS0mZ3Q7ZGV2LCBQVFJfRVJSKGdwaW9kKSwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgZGlzYWJsZS1wb3J0cyBncGlvXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldCA9IHJ0cHNlX21jdV9kaXNjb3Zlcihwc2UsICZhbXA7aW5mbyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoIWluZm8uc3lzdGVtX2VuYWJsZSkgewomIzQzOwkJcmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTsKJiM0MzsJCS8qIERpYWxlY3RzIHdpdGhvdXQgYSBnbG9iYWwtc3RhdGUgY29uY2VwdCAoZS5nLiBHZW4xKSByZXR1cm4KJiM0MzsJCSAqIC1FT1BOT1RTVVBQOyB0cmVhdCB0aGF0IGFzICYjMzQ7bm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkJiMzNDsuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLSZndDtkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cbiYjMzQ7KTsKJiM0MzsJCWlmICghcmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHBzZS0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEZXBlbmRpbmcgb24gdGhlIE1DVSBmaXJtd2FyZSBjb25maWd1cmF0aW9uICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnQKJiM0MzsJICogZm9yIGV2ZXJ5IGJvYXJkKSwgaXQgaXNuJiMzOTt0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yCiYjNDM7CSAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyCiYjNDM7CSAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwkvKiBwY2Rldi5vd25lciBpcyBzZXQgYnkgdGhlIHRyYW5zcG9ydCwgc28gdGhlIHJlZ2lzdGVyZWQgY29udHJvbGxlcgomIzQzOwkgKiBwaW5zIHRoZSB0cmFuc3BvcnQgbW9kdWxlIHRoYXQgb3ducyB0aGUgbGl2ZSBkZXZpY2UsIG5vdCB0aGUgY29yZS4KJiM0MzsJICovCiYjNDM7CXBzZS0mZ3Q7cGNkZXYub3BzICAgICAgPSAmYW1wO3J0cHNlX21jdV9vcHM7CiYjNDM7CXBzZS0mZ3Q7cGNkZXYuZGV2ICAgICAgPSBwc2UtJmd0O2RldjsKJiM0MzsJcHNlLSZndDtwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMzsKJiM0MzsJcHNlLSZndDtwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzOwomIzQzOwlwc2UtJmd0O3BjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTsKJiM0MzsJcHNlLSZndDtwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQzsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocHNlLSZndDtkZXYsICZhbXA7cHNlLSZndDtwY2Rldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9yZWdpc3Rlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8oY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O21heF9wb3J0cyA9IHBheWxvYWRbMV07CiYjNDM7CWluZm8tJmd0O3N5c3RlbV9lbmFibGUgPSAocGF5bG9hZFsyXSA9PSAweDEpOwomIzQzOwlpbmZvLSZndDtkZXZpY2VfaWQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmFtcDtwYXlsb2FkWzNdKTsKJiM0MzsJaW5mby0mZ3Q7c3dfdmVyID0gcGF5bG9hZFs1XTsKJiM0MzsJaW5mby0mZ3Q7bWN1X3R5cGUgPSBwYXlsb2FkWzZdOwomIzQzOwlpbmZvLSZndDtjb25maWdfc3RhdHVzID0gcGF5bG9hZFs3XTsKJiM0MzsJaW5mby0mZ3Q7ZXh0X3ZlciA9IHBheWxvYWRbOF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyhjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzICpzdGF0dXMpCiYjNDM7ewomIzQzOwkvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovCiYjNDM7CXJldHVybiBGSUVMRF9HRVQoR0VOTUFTSyg3LCA0KSwgc3RhdHVzLSZndDtzdHMyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKG1jdV90eXBlKSB7CiYjNDM7CWNhc2UgMHgwMDoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjMxMCYjMzQ7OwomIzQzOwljYXNlIDB4MDE6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkYyMzAmIzM0OzsKJiM0MzsJY2FzZSAweDAyOglyZXR1cm4gJiMzNDtHaWdhRGV2aWNlIEdEMzJGMzAzJiMzNDs7CiYjNDM7CWNhc2UgMHgwMzoJcmV0dXJuICYjMzQ7R2lnYURldmljZSBHRDMyRjEwMyYjMzQ7OwomIzQzOwljYXNlIDB4MDQ6CXJldHVybiAmIzM0O0dpZ2FEZXZpY2UgR0QzMkUxMDMmIzM0OzsKJiM0MzsJY2FzZSAweDEwOglyZXR1cm4gJiMzNDtOdXZvdG9uIE0wNTE2JiMzNDs7CiYjNDM7CWNhc2UgMHgxMToJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDU2NCYjMzQ7OwomIzQzOwljYXNlIDB4MTI6CXJldHVybiAmIzM0O051dm90b24gTlVDMDI5JiMzNDs7CiYjNDM7CWRlZmF1bHQ6CXJldHVybiAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJaW5mby0mZ3Q7bWF4X3BvcnRzID0gcGF5bG9hZFsxXTsKJiM0MzsJLyogR2VuMSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlCiYjNDM7CSAqICYjMzQ7cmVtb3RlIGVuYWJsZSYjMzQ7IGJpdCBpbiB0aGUgc3lzdGVtLXN0YXR1cyBmbGFncyBhdCBwYXlsb2FkWzddLgomIzQzOwkgKi8KJiM0MzsJaW5mby0mZ3Q7c3lzdGVtX2VuYWJsZSA9ICEhKHBheWxvYWRbN10gJmFtcDsgQklUKDIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZhbXA7cGF5bG9hZFszXSk7CiYjNDM7CWluZm8tJmd0O3N3X3ZlciA9IHBheWxvYWRbNV07CiYjNDM7CWluZm8tJmd0O21jdV90eXBlID0gcGF5bG9hZFs2XTsKJiM0MzsJaW5mby0mZ3Q7Y29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107CiYjNDM7CWluZm8tJmd0O2V4dF92ZXIgPSBwYXlsb2FkWzhdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKQomIzQzO3sKJiM0MzsJLyogR2VuMSBwdXRzIHRoZSBkZXRlY3RlZCBjbGFzcyBpbiBwYXlsb2FkWzNdICg9PSBzdHMzKSBkaXJlY3RseS4KJiM0MzsJICogTWFzayB0byB0aGUgbG93IG5pYmJsZTsgY2xhc3MgaXMgMC4uOCBhbmQgYW55IGhpZ2ggYml0cyB3b3VsZCBiZQomIzQzOwkgKiBub2lzZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBzdGF0dXMtJmd0O3N0czMgJmFtcDsgMHgwZjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4xX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKG1jdV90eXBlKSB7CiYjNDM7CWNhc2UgMHgwMDoJcmV0dXJuICYjMzQ7U1QgTWljcm8gU1QzMkYxMDAmIzM0OzsKJiM0MzsJY2FzZSAweDAxOglyZXR1cm4gJiMzNDtOdXZvdG9uIE0wNXh4IExBTiYjMzQ7OwomIzQzOwljYXNlIDB4MDI6CXJldHVybiAmIzM0O1NUIE1pY3JvIFNURjAzMEM4JiMzNDs7CiYjNDM7CWNhc2UgMHgwMzoJcmV0dXJuICYjMzQ7TnV2b3RvbiBNMDU4U0FOJiMzNDs7CiYjNDM7CWNhc2UgMHgwNDoJcmV0dXJuICYjMzQ7TnV2b3RvbiBOVUMxMjImIzM0OzsKJiM0MzsJZGVmYXVsdDoJcmV0dXJuICYjMzQ7dW5rbm93biYjMzQ7OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIE1hcCBlYWNoIGxvZ2ljYWwgY29tbWFuZCB0aGUgY29yZSBpc3N1ZXMgdG8gaXRzIHBlci1kaWFsZWN0IG9wY29kZS4gKi8KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjIgPSB7CiYjNDM7CS5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvLAomIzQzOwkucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzLAomIzQzOwkubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMl9tY3VfdHlwZV9zdHIsCiYjNDM7CS5vcGNvZGUgPSB7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFXQk9IFJUUFNFX01DVV9PUCgweDAwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT10JCT0gUlRQU0VfTUNVX09QKDB4NDApLAomIzQzOwkJW1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddCQk9IFJUUFNFX01DVV9PUCgweDRhKSwKJiM0MzsKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXQkJPSBSVFBTRV9NQ1VfT1AoMHgwMSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDEyKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXQk9IFJUUFNFX01DVV9PUCgweDEzKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVF0gPSBSVFBTRV9NQ1VfT1AoMHgxNCksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV0JPSBSVFBTRV9NQ1VfT1AoMHgxNSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdCQk9IFJUUFNFX01DVV9PUCgweDQyKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXQk9IFJUUFNFX01DVV9PUCgweDQ0KSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR10JCT0gUlRQU0VfTUNVX09QKDB4NDgpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR10JPSBSVFBTRV9NQ1VfT1AoMHg0OSksCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjEgPSB7CiYjNDM7CS5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvLAomIzQzOwkucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzLAomIzQzOwkubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIsCiYjNDM7CS5vcGNvZGUgPSB7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dCQk9IFJUUFNFX01DVV9PUCgweDIwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXQkJPSBSVFBTRV9NQ1VfT1AoMHgyYiksCiYjNDM7CiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV0JCT0gUlRQU0VfTUNVX09QKDB4MDApLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxNSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF0JPSBSVFBTRV9NQ1VfT1AoMHgxNiksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV0JPSBSVFBTRV9NQ1VfT1AoMHgxYSksCiYjNDM7CQlbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdCQk9IFJUUFNFX01DVV9PUCgweDIxKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXQk9IFJUUFNFX01DVV9PUCgweDMwKSwKJiM0MzsJCVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR10JCT0gUlRQU0VfTUNVX09QKDB4MjUpLAomIzQzOwkJW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR10JPSBSVFBTRV9NQ1VfT1AoMHgyNiksCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjFfZGF0YSA9IHsKJiM0MzsJLmRpYWxlY3QgPSAmYW1wO3J0cHNlX21jdV9kaWFsZWN0X2dlbjEsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMV9kYXRhKTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YSA9IHsKJiM0MzsJLmRpYWxlY3QgPSAmYW1wO3J0cHNlX21jdV9kaWFsZWN0X2dlbjIsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMl9kYXRhKTsKJiM0MzsKJiM0MzsvKiBTYW1lIGRpYWxlY3QgYXMgZ2VuMiwgYnV0IHRoZSBNQ1UgZXhwZWN0cyByYXctSTJDIGZyYW1pbmcuICovCiYjNDM7Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhID0gewomIzQzOwkuZGlhbGVjdCA9ICZhbXA7cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiwKJiM0MzsJLm5hdGl2ZV9pMmMgPSB0cnVlLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoY29yZSkmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZTEwZjhjNjMzYjY4ZWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jCkBAIC0wLDAgJiM0MzsxLDE3MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2kyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7cmVhbHRlay1wc2UtbWN1LmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc28KJiM0MzsgKiB0aGUgcmVzcG9uc2UgaXMgbm9ybWFsbHkgcmVhZHkgb24gdGhlIHZlcnkgZmlyc3QgcmVhZC4gRm9yIGNvbW1hbmRzIHRoZQomIzQzOyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2UKJiM0MzsgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NUwlSVFBTRV9NQ1VfUkVTUE9OU0VfTVMKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTCShSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TIC8gUlRQU0VfTUNVX0kyQ19SRVRSWV9NUykKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJLyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqLwomIzQzOwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVxLSZndDtvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsCiYjNDM7CQkJCQkgICAgICAodTggKilyZXEgJiM0MzsgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJCQkgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtJmd0O2Rldik7CiYjNDM7CWludCB0cmllcywgcmV0OwomIzQzOwomIzQzOwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgJmx0OyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodHJpZXMgJmd0OyAwKQomIzQzOwkJCW1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTsKJiM0MzsKJiM0MzsJCS8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqLwomIzQzOwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLAomIzQzOwkJCQkJCSAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsCiYjNDM7CQkJCQkJICAgICh1OCAqKXJlc3ApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFICZhbXA7JmFtcDsgcnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHsKJiM0MzsJLnNlbmQgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQsCiYjNDM7CS5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLSZndDtkZXYpOwomIzQzOwl2b2lkICpidWY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIGkyY19tYXN0ZXJfc2VuZCgpIG1heSBETUEsIHNvIHRoZSBidWZmZXIgbXVzdCBub3QgYmUgb24gdGhlIHN0YWNrLiAqLwomIzQzOwlidWYgPSBrbWVtZHVwKHJlcSwgUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFidWYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiByZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFID8gMCA6IC1FSU87CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS0mZ3Q7ZGV2KTsKJiM0MzsJaW50IHRyaWVzLCByZXQ7CiYjNDM7CXU4ICpidWY7CiYjNDM7CiYjNDM7CS8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqLwomIzQzOwlidWYgPSBrbWFsbG9jKFJUUFNFX01DVV9NU0dfU0laRSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAodHJpZXMgPSAwOyB0cmllcyAmbHQ7IFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcyYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0cmllcyAmZ3Q7IDApCiYjNDM7CQkJbXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpOwomIzQzOwomIzQzOwkJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQlpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSkgewomIzQzOwkJCW1lbWNweShyZXNwLCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7CiYjNDM7CQkJaWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHsKJiM0MzsJCQkJcmV0ID0gMDsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldCA9IC1FVElNRURPVVQ7CiYjNDM7b3V0OgomIzQzOwlrZnJlZShidWYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA9IHsKJiM0MzsJLnNlbmQgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kLAomIzQzOwkucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7Y2xpZW50LSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlOwomIzQzOwlib29sIHVzZV9uYXRpdmU7CiYjNDM7CiYjNDM7CW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CiYjNDM7CWlmICghbWF0Y2gpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsICYjMzQ7bWlzc2luZyBtYXRjaCBkYXRhXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBmcmFtaW5nIChyYXcgSTJDIHZzIFNNQnVzKSBpcyBjYXJyaWVkIGJ5IHRoZSBtYXRjaCBkYXRhLiAqLwomIzQzOwl1c2VfbmF0aXZlID0gbWF0Y2gtJmd0O25hdGl2ZV9pMmM7CiYjNDM7CWlmICh1c2VfbmF0aXZlKSB7CiYjNDM7CQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0mZ3Q7YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLAomIzQzOwkJCQkmIzM0O3BsYWluLUkyQyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgSTJDLWNhcGFibGUgYWRhcHRlclxuJiMzNDspOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtJmd0O2FkYXB0ZXIsCiYjNDM7CQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyB8CiYjNDM7CQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLAomIzQzOwkJCQkmIzM0O1NNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBzZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHNlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBzZS0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwlwc2UtJmd0O3BjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CiYjNDM7CXBzZS0mZ3Q7dHJhbnNwb3J0ID0gdXNlX25hdGl2ZSA/ICZhbXA7cnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzIDogJmFtcDtydHBzZV9tY3VfaTJjX3NtYnVzX29wczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9yZWdpc3Rlcihwc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydHBzZV9tY3VfaTJjX29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzJiMzNDssIC5kYXRhID0gJmFtcDtydHBzZV9tY3VfZ2VuMV9kYXRhIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzJiMzNDssIC5kYXRhID0gJmFtcDtydHBzZV9tY3VfZ2VuMl9kYXRhIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscHNlLW1jdS1nZW4yLWkyYyYjMzQ7LCAuZGF0YSA9ICZhbXA7cnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfaTJjX29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRwc2VfbWN1X2kyY19kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZQkJPSAmIzM0O3JlYWx0ZWstcHNlLW1jdS1pMmMmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZQk9IHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7CS5wcm9iZQkJPSBydHBzZV9tY3VfaTJjX3Byb2JlLAomIzQzO307CiYjNDM7bW9kdWxlX2kyY19kcml2ZXIocnRwc2VfbWN1X2kyY19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKb25hcyBKZWxvbmVrICZsdDtqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydCkmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YmFhMTdkOGQzMWZhMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jCkBAIC0wLDAgJiM0MzsxLDE2NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZXJkZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtyZWFsdGVrLXBzZS1tY3UuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQJMTkyMDAKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQJbXNlY3NfdG9famlmZmllcygxMDApCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUykKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlOwomIzQzOwlzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2OwomIzQzOwlzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lOwomIzQzOwlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0cyByeF9idWYgYW5kIHJ4X2xlbiAqLwomIzQzOwlzaXplX3QgcnhfbGVuOwomIzQzOwl1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlbgomIzQzOyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50CiYjNDM7ICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZAomIzQzOyAqIGludG8gdGhlIG5leHQgZnJhbWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsCiYjNDM7CQkJCSAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSBzZXJkZXZfZGV2aWNlX2dldF9kcnZkYXRhKHNlcmRldik7CiYjNDM7CXNpemVfdCB0YWtlOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCXRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtJmd0O3J4X2J1ZikgLSBjdHgtJmd0O3J4X2xlbik7CiYjNDM7CQlpZiAodGFrZSkgewomIzQzOwkJCW1lbWNweShjdHgtJmd0O3J4X2J1ZiAmIzQzOyBjdHgtJmd0O3J4X2xlbiwgYnVmLCB0YWtlKTsKJiM0MzsJCQljdHgtJmd0O3J4X2xlbiAmIzQzOz0gdGFrZTsKJiM0MzsJCQlpZiAoY3R4LSZndDtyeF9sZW4gPT0gc2l6ZW9mKGN0eC0mZ3Q7cnhfYnVmKSkKJiM0MzsJCQkJY29tcGxldGUoJmFtcDtjdHgtJmd0O3J4X2RvbmUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGNvbnN1bWUgYWxsIHRvIGF2b2lkIGRlc3luYy9taXNhbGlnbm1lbnQgKi8KJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmRldl9kZXZpY2Vfb3BzIHJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMgPSB7CiYjNDM7CS5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsCiYjNDM7CS53cml0ZV93YWtldXAgPSBzZXJkZXZfZGV2aWNlX3dyaXRlX3dha2V1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTsKJiM0MzsJaW50IHdyaXR0ZW47CiYjNDM7CiYjNDM7CS8qIGNsZWFyIGFueSBsZWZ0b3ZlciByeCBzdGF0ZSBiZWZvcmUgdHJhbnNtaXR0aW5nICovCiYjNDM7CXNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCAmYW1wO2N0eC0mZ3Q7cnhfbG9jaykgewomIzQzOwkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtjdHgtJmd0O3J4X2RvbmUpOwomIzQzOwkJY3R4LSZndDtyeF9sZW4gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdyaXR0ZW4gPSBzZXJkZXZfZGV2aWNlX3dyaXRlKGN0eC0mZ3Q7c2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSwKJiM0MzsJCQkJICAgICAgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVCk7CiYjNDM7CWlmICh3cml0dGVuICZsdDsgMCkKJiM0MzsJCXJldHVybiB3cml0dGVuOwomIzQzOwlpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7CiYjNDM7CiYjNDM7CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7Y3R4LSZndDtyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSkKJiM0MzsJCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjdHgtJmd0O3J4X2xvY2spIHsKJiM0MzsJCWlmIChjdHgtJmd0O3J4X2xlbiAhPSBzaXplb2YoKnJlc3ApKQomIzQzOwkJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwkJbWVtY3B5KHJlc3AsIGN0eC0mZ3Q7cnhfYnVmLCBzaXplb2YoKnJlc3ApKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzID0gewomIzQzOwkuc2VuZCA9IHJ0cHNlX21jdV91YXJ0X3NlbmQsCiYjNDM7CS5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdiwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldikKJiM0Mzt7CiYjNDM7CXUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtzZXJkZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHg7CiYjNDM7CXVuc2lnbmVkIGludCBiYXVkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljdHgtJmd0O3NlcmRldiA9IHNlcmRldjsKJiM0MzsJY3R4LSZndDtwc2UuZGV2ID0gZGV2OwomIzQzOwljdHgtJmd0O3BzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwljdHgtJmd0O3BzZS50cmFuc3BvcnQgPSAmYW1wO3J0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHM7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO2N0eC0mZ3Q7cnhfZG9uZSk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7Y3R4LSZndDtyeF9sb2NrKTsKJiM0MzsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfZHJ2ZGF0YShzZXJkZXYsIGN0eCk7CiYjNDM7CXNlcmRldl9kZXZpY2Vfc2V0X2NsaWVudF9vcHMoc2VyZGV2LCAmYW1wO3J0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX3NlcmRldl9kZXZpY2Vfb3BlbihkZXYsIHNlcmRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtmYWlsZWQgdG8gb3BlbiBzZXJkZXZcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgJiMzNDtjdXJyZW50LXNwZWVkJiMzNDssICZhbXA7c3BlZWQpOwomIzQzOwomIzQzOwliYXVkID0gc2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7CiYjNDM7CWlmIChiYXVkICE9IHNwZWVkKQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O2NvdWxkIG5vdCBzZXQgYmF1ZHJhdGUgJXUsIGNvbnRyb2xsZXIgdXNlcyAldVxuJiMzNDssCiYjNDM7CQkJIHNwZWVkLCBiYXVkKTsKJiM0MzsKJiM0MzsJc2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKHNlcmRldiwgZmFsc2UpOwomIzQzOwomIzQzOwlyZXQgPSBzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O2NvdWxkIG5vdCBzZXQgcGFyaXR5IHRvIG5vbmU6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ0cHNlX21jdV9yZWdpc3RlcigmYW1wO2N0eC0mZ3Q7cHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjEmIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9nZW4xX2RhdGEgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxwc2UtbWN1LWdlbjImIzM0OywgLmRhdGEgPSAmYW1wO3J0cHNlX21jdV9nZW4yX2RhdGEgfSwKJiM0MzsJeyAvKiBzZW50aW5lbCAqLyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7cmVhbHRlay1wc2UtbWN1LXVhcnQmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IHJ0cHNlX21jdV91YXJ0X29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUgID0gcnRwc2VfbWN1X3VhcnRfcHJvYmUsCiYjNDM7fTsKJiM0Mzttb2R1bGVfc2VyZGV2X2RldmljZV9kcml2ZXIocnRwc2VfbWN1X3VhcnRfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Sm9uYXMgSmVsb25layAmbHQ7amVsb25lay5qb25hc0BnbWFpbC5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KSYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMGEzMTk3YzljOWNkMWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LmgKQEAgLTAsMCAmIzQzOzEsODkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1JFQUxURUtfUFNFX01DVV9ICiYjNDM7I2RlZmluZSBfUkVBTFRFS19QU0VfTUNVX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGltZSB0aGUgTUNVIGl0c2VsZiBuZWVkcyBiZXR3ZWVuIGFjY2VwdGluZyBhIHJlcXVlc3QgYW5kIGhhdmluZyBhCiYjNDM7ICogcmVzcG9uc2UgcmVhZHkuIFRoZXNlIGFyZSBwcm9wZXJ0aWVzIG9mIHRoZSBNQ1UgZmlybXdhcmUsIG5vdCBvZiB0aGUKJiM0MzsgKiB1bmRlcmx5aW5nIHRyYW5zcG9ydDogdGhlIGNvcmUgcGFjZXMgdHJhbnNhY3Rpb25zIGJ5IFJUUFNFX01DVV9SRVNQT05TRV9NUwomIzQzOyAqIGFuZCBib3RoIHRyYW5zcG9ydHMgc2l6ZSB0aGVpciBwZXItdHJhbnNhY3Rpb24gcmVjdiBjZWlsaW5nIGZyb20KJiM0MzsgKiBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TLCBzaW5jZSBzb21lIGNvbW1hbmRzIGFyZSBkb2N1bWVudGVkIGFzCiYjNDM7ICogbmVlZGluZyB1cCB0byB+MXMgdG8gcHJvZHVjZSBhIHJlcGx5LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRQU0VfTUNVX1JFU1BPTlNFX01TCQkJMjUKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMJCTEwMDAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2UKJiM0MzsgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90CiYjNDM7ICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmUKJiM0MzsgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVMJCTMwMDAKJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9CT09UX1JFVFJZX01TCQkJMTAwCiYjNDM7CiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfTVNHX1NJWkUJCQkxMgomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfbXNnIHsKJiM0MzsJdTggb3Bjb2RlOwomIzQzOwl1OCBzZXFfbnVtOwomIzQzOwl1OCBwYXlsb2FkWzldOwomIzQzOwl1OCBjaGVja3N1bTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qCiYjNDM7ICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IEdlbjIgbmV2ZXIgZW1pdHMgdGhlbSkuCiYjNDM7ICogSU5DT01QTEVURS9CQURfQ1NVTSBhcmUgdGVybWluYWw7IE5PVF9SRUFEWSBpcyB0cmFuc2llbnQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUJCTB4ZmQJLyogLUVCQURFICAgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU0JCTB4ZmUJLyogLUVCQURNU0cgKi8KJiM0MzsjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZCQkweGZmCS8qIC1FQUdBSU4gICovCiYjNDM7CiYjNDM7LyogQSBwb2xsaW5nIHRyYW5zcG9ydCBjYW4gc3RvcCBoZXJlOiB0aGUgbWF0Y2hpbmcgcmVwbHksIG9yIGEgdGVybWluYWwgZXJyb3IuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsCiYjNDM7CQkJCQkgICBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZXNwLSZndDtvcGNvZGUgPT0gcmVxLSZndDtvcGNvZGUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHwKJiM0MzsJICAgICAgIHJlc3AtJmd0O29wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovCiYjNDM7c3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0OwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybDsKJiM0MzsKJiM0MzsvKiBQZXItY29tcGF0aWJsZSBtYXRjaCBkYXRhICh0aGUgb2ZfbWF0Y2ggLmRhdGEpLiAqLwomIzQzO3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDsKJiM0MzsJYm9vbCBuYXRpdmVfaTJjOwkvKiByYXctSTJDIGZyYW1pbmcgKHZzIFNNQnVzKTsgSTJDIHRyYW5zcG9ydCBvbmx5ICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgewomIzQzOwlpbnQgKCpzZW5kKShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSk7CiYjNDM7CWludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLAomIzQzOwkJICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydHBzZV9tY3VfY3RybCB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjsKJiM0MzsJc3RydWN0IG11dGV4IG11dGV4OyAvKiBzZXJpYWxpemVzIE1DVSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zYWN0aW9ucyAqLwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvICpjaGlwOwomIzQzOwljb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgKnRyYW5zcG9ydDsKJiM0MzsJdTggc2VxOwkJCS8qIHJvbGxpbmcgcmVxdWVzdCBzZXFfbnVtLCBlY2hvZWQgYnkgdGhlIE1DVSAqLwomIzQzO307CiYjNDM7CiYjNDM7aW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7CiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhOwomIzQzOwomIzQzOyNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAxNAoJCQkJCQkJb3V0cHV0OiAzODQKCQkJCQkJCXRob3VnaHRzOiAzMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFJlYWx0ZWsgUFNFIE1DVSBEcml2ZXIqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSwgaGFuZGxpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSByZWFjaCBpdCBpbiBRRU1VPyBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIEkyQyBhbmQgVUFSVCwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIG9yIGluc3RhbnRpYXRlZCBpbiBhIGZldyB3YXlzLiBJMkMsIGZvciBpbnN0YW5jZSwgaGFzIGBpMmMtc3R1YmAsIGBpMmMtZGV2YCwgb3IgZGV2aWNlIHRyZWUgbm9kZXMgZm9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiwgb3Igc3l6a2FsbGVyIGl0c2VsZiBjYW4gaW5qZWN0IHRyYWZmaWMgb3IgY3JlYXRlIHZpcnR1YWwgZGV2aWNlcy4gU3l6a2FsbGVyLCByaWdodC4uLiBpdCBtaWdodCB1c2UgYC9kZXYvaTJjLVhgLCBidXQgdGhpcyBpcyBhICpzcGVjaWZpYyoga2VybmVsIGRyaXZlci4gU28sIGNhbiB3ZSBwcm9iZSB0aGlzIGRyaXZlcj8KClRoZSBhbnN3ZXIgaXMgeWVzLiBEZXZpY2UgdHJlZSBub2RlcyBvciBJMkMgc3lzZnMgYG5ld19kZXZpY2VgIHNob3VsZCBkbyB0aGUgdHJpY2suIFVBUlQsIGJlaW5nIHNlcmRldiwgYWxzbyByZWxpZXMgb24gZGV2aWNlIHRyZWUsIHRob3VnaCBgbGRhdHRhY2hgIGlzIHRlbXB0aW5nLCBpdCBpcyBub3QgdGhlIHVzdWFsIGNhc2UuIFN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIG92ZXJsYXlzLCBhbmQgaXQgaGFzIGJ1aWx0LWluIHdheXMgdG8gdGVzdCBzZXJkZXYgYW5kIEkyQyBkcml2ZXJzIGlmIGluc3RhbnRpYXRlZC4gU28sIGNhbiB3ZSBmdXp6IHRoaXMgdGhpbmc/IEFic29sdXRlbHkuCgpUaGUgZHJpdmVyIGltcGxlbWVudHMgYHBzZV9jb250cm9sbGVyX29wc2AsIHNvIGlmIGl0JiMzOTtzIHByb2JlZCwgd2UmIzM5O3JlIHRhbGtpbmcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzIHRvIHJlYWNoIHRob3NlIGZ1bmN0aW9ucy4gQ3J1Y2lhbGx5LCBJMkMgZGV2aWNlcyBjYW4gYmUgaW5zdGFudGlhdGVkIGJ5IHdyaXRpbmcgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy1YL25ld19kZXZpY2VgLiAqVGhhdCYjMzk7cyogdGhlIGtleS4gSSBzZWUgYW4gYG9mX21hdGNoX3RhYmxlYCwgbm90IGFuIGBpZF90YWJsZWAuIERvZXMgYG5ld19kZXZpY2VgIHdvcmsgd2l0aCBhbiBgb2ZfbWF0Y2hfdGFibGVgPyBOb3JtYWxseSBpdCB3YW50cyBhbiBgaWRfdGFibGVgIG9yIGBkcml2ZXIubmFtZWAuIFdhaXQuLi4gSTJDIGNvcmUgZmFsbHMgYmFjayB0byBgb2ZfbWF0Y2hfdGFibGVgIGlmIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgY29tcGF0aWJsZSBzdHJpbmcgKndpdGhvdXQqIHRoZSB2ZW5kb3IgcHJlZml4LCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBTeXprYWxsZXIgY2FuIGxvYWQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgYW55d2F5LgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGZvciBvdXIgZnV6emluZyBlZmZvcnRzPyBXZSBuZWVkIHRvIHBpbnBvaW50IHRoZSBlbnRyeSBwb2ludHMuIFRoZSBkcml2ZXIgZXhwb3NlcyB0aGVzZSBmdW5jdGlvbnM6IGBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVgLCBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c2AsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NgLCBhbmQgc28gb24uIEFsbCB0aGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBldGh0b29sIG5ldGxpbmsgaWYgdGhlIGRldmljZSBpcyBwcm9iZWQuIEFuZCBvZiBjb3Vyc2UsIHRoZSBJMkMgYW5kIFVBUlQgcmVjZWl2ZSBwYXRoczogYHJ0cHNlX21jdV91YXJ0X3JlY2VpdmVgLCBgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2YCwgYHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3ZgLiBJbXBvcnRhbnRseSwgYHJ0cHNlX21jdV91YXJ0X3JlY2VpdmVgIGlzIGNhbGxlZCB3aGVuIGRhdGEgY29tZXMgaW4gb3ZlciBVQVJULiBJbnN0YW50aWF0ZSB0aGUgc2VyZGV2IGRldmljZSBhbmQgd2UgY2FuIGZlZWQgaXQgZGF0YSwgZS5nLiwgdmlhIGEgcHR5LiBFeGNlbGxlbnQuIFRpbWUgdG8gZnV6ei4KClRoaXMgaXMgYSBuZXcgZHJpdmVyLCBpdCBwYXJzZXMgZGF0YSBmcm9tIHRoZSBkZXZpY2UsIGFuZCBleHBvc2VzIG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlIOKAkyBwcmltZSBmdXp6aW5nIG1hdGVyaWFsLgoKVG8gZW5hYmxlIHRoaXMsIHdlIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgLCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVWAsIGBDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQ2AsIGFuZCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUYC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gWWVwLCB0aGF0IGxvb2tzIHJpZ2h0OyBgUFNFX0NPTlRST0xMRVJgIGFuZCBgU0VSSUFMX0RFVl9CVVNgIG5lZWQgdG8gYmUgZW5hYmxlZCBhbmQgYEkyQ2AuCgpPa2F5LCBsZXQmIzM5O3MgbGlzdCB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6CgoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZWAKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2AKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3YAoqICAgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWAKKiAgIGBydHBzZV9tY3VfcG9ydF9kaXNhYmxlYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlYAoqICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdGAKKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRgCiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc2AKKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHJpb2AKKiAgIGBydHBzZV9tY3VfcG9ydF9zZXRfcHJpb2AKKiAgIGBydHBzZV9tY3VfdWFydF9yZWNlaXZlYAoqICAgYHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdmAKKiAgIGBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2YAoqICAgYHJ0cHNlX21jdV9kaXNjb3ZlcgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUFMVEVLX01DVV9JMkMmIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX1VBUlQmIzM0OywKICAgICYjMzQ7U0VSSUFMX0RFVl9CVVMmIzM0OywKICAgICYjMzQ7STJDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRwc2VfbWN1X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9pMmNfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X3NldF9wcmlvJiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV91YXJ0X3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCBzdXBwb3J0aW5nIGJvdGggSTJDIGFuZCBVQVJUIHRyYW5zcG9ydHMuIFRoZSBkcml2ZXIgZXhwb3NlcyBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBuZXRsaW5rIGFuZCBwYXJzZXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2Ugb3ZlciBJMkMvVUFSVC4gSXQgY2FuIGJlIHByb2JlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3IgSTJDIHN5c2ZzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFQUxURUtfTUNVX0kyQyYjMzQ7LAogICAgJiMzNDtQU0VfUkVBTFRFS19NQ1VfVUFSVCYjMzQ7LAogICAgJiMzNDtTRVJJQUxfREVWX0JVUyYjMzQ7LAogICAgJiMzNDtJMkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydHBzZV9tY3VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X2kyY19wcm9iZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9lbmFibGUmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0JiMzNDssCiAgICAmIzM0O3J0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXMmIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8mIzM0OywKICAgICYjMzQ7cnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHN1cHBvcnRpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gVGhlIGRyaXZlciBleHBvc2VzIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlIHZpYSBldGh0b29sIG5ldGxpbmsgYW5kIHBhcnNlcyBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBvdmVyIEkyQy9VQVJULiBJdCBjYW4gYmUgcHJvYmVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBJMkMgc3lzZnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMDE6MTU6MTcuNTY1MTcyMDMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MDM3OTk5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9JMkNcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9VQVJUXCIsXG4gICAgXCJTRVJJQUxfREVWX0JVU1wiLFxuICAgIFwiSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRwc2VfbWN1X3JlZ2lzdGVyXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9lbmFibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2Rpc2FibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHN1cHBvcnRpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gVGhlIGRyaXZlciBleHBvc2VzIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlIHZpYSBldGh0b29sIG5ldGxpbmsgYW5kIHBhcnNlcyBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBvdmVyIEkyQy9VQVJULiBJdCBjYW4gYmUgcHJvYmVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBJMkMgc3lzZnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMToxNToxNy41NjUxNzk2NjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTMyNDMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI4NmMyMTY2MjA1OWRhNDgxZTcxOWFiOWFkYWVhZTg3N2EwNjgxZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDE6MTU6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wZjFhODE5ZGI0OWJiY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sXFxuQEAgLTAsMCArMSwxODAgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcHNlLXBkL3JlYWx0ZWsscHNlLW1jdS1nZW4xLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFJlYWx0ZWsgUFNFIE1DVVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKb25hcyBKZWxvbmVrIFxcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudClcXG4rICBoYXJkd2FyZSBvbiBhIHJhbmdlIG9mIG1hbmFnZWQgUG9FIHN3aXRjaGVzLiBUaGUgaG9zdCBDUFUgdGFsa3Mgb25seSB0b1xcbisgIHRoaXMgTUNVIC0gb3ZlciBJMkMvU01CdXMgb3IgVUFSVCAtIHVzaW5nIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDtcXG4rICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkXFxuKyAgZGlyZWN0bHkuIEZvciBleGFtcGxlLCBvbiB0aGUgWnl4ZWwgR1MxOTAwLTEwSFAgdGhlIFNvQyByZWFjaGVzIHRoZSBNQ1VcXG4rICBvdmVyIFVBUlQsIGFuZCB0aGUgTUNVIG1hbmFnZXMgdGhlIG9uLWJvYXJkIFBTRSBjaGlwLlxcbitcXG4rICBUaGlzIGJpbmRpbmcgZGVzY3JpYmVzIHRoZSBNQ1UgdG9nZXRoZXIgd2l0aCBpdHMgUmVhbHRlayBmaXJtd2FyZTogdGhlXFxuKyAgZmlybXdhcmUgYW5kIGl0cyBob3N0IHByb3RvY29sLCB3aGljaCBhcmUgc3RhYmxlIGFjcm9zcyBib2FyZHMuIFRoZVxcbisgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGVcXG4rICBQU0Ugc2lsaWNvbiBiZWhpbmQgdGhlIE1DVSAoUmVhbHRlayBSVEw4MjN4L1JUTDgyMzkqIG9yIEJyb2FkY29tXFxuKyAgQkNNNTl4eHgpIGlzIHJlcG9ydGVkIGJ5IHRoZSBNQ1UgYW5kIGRldGVjdGVkIGF0IHJ1bnRpbWUgLSBuZWl0aGVyIGlzXFxuKyAgbmFtZWQgaGVyZS5cXG4rXFxuKyAgVHdvIHByb3RvY29sIGdlbmVyYXRpb25zIGV4aXN0LCBib3RoIFJlYWx0ZWsnczpcXG4rICAgIGdlbjEgIG9sZGVyIGJvYXJkcywgd2hlcmUgdGhlIE1DVSBmcm9udHMgQnJvYWRjb20gUFNFIHNpbGljb25cXG4rICAgIGdlbjIgIHRoZSBhbHRlcmVkIHByb3RvY29sIHVzZWQgd2l0aCBSZWFsdGVrJ3Mgb3duIFBTRSBzaWxpY29uXFxuK1xcbisgIE9uIGFuIEkyQyBhdHRhY2htZW50IHRoZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBpcyBwYXJ0IG9mIHRoZVxcbisgIGNvbXBhdGlibGU6ICctc21idXMnIChyZWFkcyBjYXJyeSBhIGxlYWRpbmcgY29tbWFuZCBieXRlIGFuZCBhIHJlcGVhdGVkXFxuKyAgc3RhcnQpIG9yICctaTJjJyAoYmFyZSBibG9jayB3cml0ZXMgYW5kIHJlYWRzKS4gQSBVQVJUIGF0dGFjaG1lbnQgY2Fycmllc1xcbisgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJ3NlcmlhbCcgbm9kZS5cXG4rXFxuKyAgRWFjaCBib2FyZCBhZGRpdGlvbmFsbHkgY2FycmllcyBhIGRldmljZS1zcGVjaWZpYyBjb21wYXRpYmxlIHRoYXQgZmFsbHNcXG4rICBiYWNrIHRvIG9uZSBvZiB0aGUgcHJvdG9jb2wgY29tcGF0aWJsZXMgYWJvdmUuIERyaXZlcnMgYmluZCBvbiB0aGVcXG4rICBwcm90b2NvbCBjb21wYXRpYmxlOyB0aGUgZGV2aWNlLXNwZWNpZmljIHN0cmluZyBpZGVudGlmaWVzIHRoZSBib2FyZCBhbmRcXG4rICByZXNlcnZlcyBhIHBsYWNlIGZvciBhIGZ1dHVyZSBwZXItYm9hcmQgcXVpcmsgd2l0aG91dCBoYXZpbmcgdG8gcmV0cm9maXRcXG4rICBkZXZpY2UgdHJlZXMgYWxyZWFkeSBpbiB0aGUgZmllbGQuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBvbmVPZjpcXG4rICAgICAgIyBVQVJUXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xXFxuK1xcbisgICAgICAjIEkyQywgU01CdXMgZnJhbWluZ1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTIwLTI0aHAtdjItcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1xcbitcXG4rICAgICAgIyBVQVJUXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSB6eXhlbCxnczE5MDAtMTBocC1iMS1wc2VcXG4rICAgICAgICAgICAgICAtIHp5eGVsLHhtZzE5MTUtMTBlcC1wc2VcXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4yXFxuK1xcbisgICAgICAjIEkyQywgU01CdXMgZnJhbWluZ1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0genl4ZWwseHMxOTMwLTEyaHAtcHNlXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xcbitcXG4rICAgICAgIyBJMkMsIHJhdyBmcmFtaW5nXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSBsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1xcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICByZXNldC1ncGlvczpcXG4rICAgIGRlc2NyaXB0aW9uOiBSZXNldCBsaW5lIG9mIHRoZSBNQ1UuXFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBkaXNhYmxlLXBvcnRzLWdwaW9zOlxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEhhcmR3YXJlIGdhdGUgdGhhdCBmb3JjZXMgYWxsIHBvcnRzIGludG8gYWRtaW4tZGlzYWJsZWQgc3RhdGUgd2hpbGVcXG4rICAgICAgYXNzZXJ0ZWQuXFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IHBzZS1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rICAjIEEgJy1zbWJ1cycvJy1pMmMnIGNvbXBhdGlibGUgaXMgYW4gSTJDIGF0dGFjaG1lbnQ6IGl0IGhhcyAncmVnJyBhbmRcXG4rICAjIGNhbm5vdCBjYXJyeSBzZXJpYWwgYnVzIHByb3BlcnRpZXMuIEEgYmFyZSBnZW4gY29tcGF0aWJsZSBpcyBhIFVBUlRcXG4rICAjIGF0dGFjaG1lbnQ6IG5vICdyZWcnLCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXFxuKyAgICB0aGVuOlxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIHJlZ1xcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGN1cnJlbnQtc3BlZWQ6IGZhbHNlXFxuKyAgICAgICAgbWF4LXNwZWVkOiBmYWxzZVxcbisgICAgZWxzZTpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6IGZhbHNlXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAjIFNNQnVzLWZyYW1lZCBJMkMgYXR0YWNobWVudFxcbisgIC0gfFxcbisgICAgaTJjIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcHNlQDIwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ6eXhlbCx4czE5MzAtMTJocC1wc2VcXFwiLCBcXFwicmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XFxuKyAgLSB8XFxuKyAgICBpMmMge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1wc2VAMjAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImxpbmtzeXMsbGdzMzI4bXBjLXYyLXBzZVxcXCIsIFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHgyMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBwc2UtcGlzIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgIyBVQVJUIGF0dGFjaG1lbnRcXG4rICAtIHxcXG4rICAgIHNlcmlhbCB7XFxuKyAgICAgICAgZXRoZXJuZXQtcHNlIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ6eXhlbCxnczE5MDAtMTBocC1hMS1wc2VcXFwiLCBcXFwicmVhbHRlayxwc2UtbWN1LWdlbjFcXFwiO1xcbisgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gXFx1MDAzYzE5MjAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIHBzZS1waXMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNjBjZmYwMDk1M2RjYmUuLjE2MTM2YWMxMWUwNjM3IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjI3MzYsNiArMjI3MzYsMTMgQEAgUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0aW5jbHVkZS9zb3VuZC9ydCouaFxcbiBGOlxcdHNvdW5kL3NvYy9jb2RlY3MvcnQqXFxuIFxcbitSRUFMVEVLIFBTRSBNQ1UgRFJJVkVSXFxuK006XFx0Sm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sXFxuK0Y6XFx0ZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdSpcXG4rXFxuIFJFQUxURUsgT1RUTyBXQVRDSERPR1xcbiBNOlxcdFNhbmRlciBWYW5oZXVsZSBcXHUwMDNjc2FuZGVyQHN2YW5oZXVsZS5uZXRcXHUwMDNlXFxuIEw6XFx0bGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcXG5pbmRleCA3ZWYyOTY1N2VlNWRkMS4uYTBmMmFlNjY4YzY3YzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xcbkBAIC0xMyw2ICsxMywzNCBAQCBtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXFxuIFxcbiBpZiBQU0VfQ09OVFJPTExFUlxcbiBcXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVVxcbitcXHR0cmlzdGF0ZVxcbitcXHRoZWxwXFxuK1xcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzIHNlbGVjdGVkXFxuK1xcdCAgYXV0b21hdGljYWxseSBieSB0aGUgdHJhbnNwb3J0IG9wdGlvbnMgYmVsb3cuXFxuK1xcbitjb25maWcgUFNFX1JFQUxURUtfTUNVX0kyQ1xcbitcXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcXFwiXFxuK1xcdGRlcGVuZHMgb24gSTJDXFxuK1xcdHNlbGVjdCBQU0VfUkVBTFRFS19NQ1VcXG4rXFx0aGVscFxcbitcXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXFxuK1xcdCAgaGFyZHdhcmUgb24gdmFyaW91cyBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMsIGF0dGFjaGVkXFxuK1xcdCAgdmlhIEkyQy9TTUJ1cy4gVGhlIE1DVSBleHBvc2VzIGEgbWVzc2FnZS1iYXNlZCBwcm90b2NvbDsgdGhlIGFjdHVhbFxcbitcXHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXFxuK1xcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS1pMmMuXFxuK1xcbitjb25maWcgUFNFX1JFQUxURUtfTUNVX1VBUlRcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKFVBUlQgdHJhbnNwb3J0KVxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xcbitcXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXFxuK1xcdGhlbHBcXG4rXFx0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxcbitcXHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxcbitcXHQgIHZpYSBVQVJULiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsIFBTRVxcbitcXHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcXG4rXFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmVhbHRlay1wc2UtbWN1LXVhcnQuXFxuK1xcbiBjb25maWcgUFNFX1JFR1VMQVRPUlxcbiBcXHR0cmlzdGF0ZSBcXFwiUmVndWxhdG9yIGJhc2VkIFBTRSBjb250cm9sbGVyXFxcIlxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxcbmluZGV4IGNjNzhmN2VhN2Y1ZjcxLi45Y2NhNTkwMGZlMzQyMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcXG5AQCAtMyw2ICszLDkgQEBcXG4gXFxuIG9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgKz0gcHNlX2NvcmUub1xcbiBcXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVSkgKz0gcmVhbHRlay1wc2UtbWN1LWNvcmUub1xcbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQykgKz0gcmVhbHRlay1wc2UtbWN1LWkyYy5vXFxuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfVUFSVCkgKz0gcmVhbHRlay1wc2UtbWN1LXVhcnQub1xcbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgKz0gcHNlX3JlZ3VsYXRvci5vXFxuIG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgKz0gcGQ2OTJ4MC5vXFxuIG9iai0kKENPTkZJR19QU0VfU0kzNDc0KSArPSBzaTM0NzQub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODIwNGNiNDMwZmZlYThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1jb3JlLmNcXG5AQCAtMCwwICsxLDk4OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgZnJvbnRpbmcgUFNFIHNpbGljb24gb24gdmFyaW91c1xcbisgKiBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMuIFRoZSBNQ1Ugc3BlYWtzIGEgMTItYnl0ZSBmaXhlZC1mcmFtZVxcbisgKiBtYW5hZ2VtZW50IHByb3RvY29sOyB0aGlzIGRyaXZlciBjb3ZlcnMgdHdvIGdlbmVyYXRpb25zIG9mIHRoZVxcbisgKiBwcm90b2NvbCB2aWEgYSBwZXItZGlhbGVjdCBvcGNvZGUgdGFibGUgYW5kIHJlc3BvbnNlIHBhcnNlcnMuXFxuKyAqXFxuKyAqIE1hbnkgUG9FIHN3aXRjaCBkZXNpZ25zIHB1dCBhIGRlZGljYXRlZCBtaWNyb2NvbnRyb2xsZXIgaW4gZnJvbnQgb2YgdGhlXFxuKyAqIGFjdHVhbCBQU0Ugc2lsaWNvbjogdGhlIGhvc3QgQ1BVIHRhbGtzIHRvIHRoZSBNQ1Ugb3ZlciBJMkMvU01CdXMgb3JcXG4rICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVXFxuKyAqIHNwZWFrcyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2wuIFRoZSBQU0UgY2hpcHMgdGhlbXNlbHZlcyBhcmUgbm90XFxuKyAqIGFjY2Vzc2VkIGRpcmVjdGx5OyBldmVyeXRoaW5nIGdvZXMgdGhyb3VnaCBNQ1UgY29tbWFuZHMuXFxuKyAqXFxuKyAqIFRoaXMgZHJpdmVyIHRhcmdldHMgdGhhdCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBSZWFsdGVrLWZhbWlseSBwcm90b2NvbC5cXG4rICogVHdvIGdlbmVyYXRpb25zIGFyZSBzdXBwb3J0ZWQ6IEdlbjEgYmVpbmcgdXNlZCBvbiBvbGRlciBzd2l0Y2hlcyB3aGVyZVxcbisgKiB0aGUgTUNVIGZyb250cyBhbmQgbWFuYWdlcyBCcm9hZGNvbSBQU0Ugc2lsaWNvbjsgR2VuMiBiZWluZyB1c2VkIHdpdGhcXG4rICogUmVhbHRlayBQU0Ugc2lsaWNvbi4gVGhlIHR3byBzaGFyZSBmcmFtZSBmb3JtYXQgYW5kIGEgc3VtLW1vZC0yNTZcXG4rICogY2hlY2tzdW0gYnV0IGRpdmVyZ2Ugb24gb3Bjb2RlIG51bWJlcnMgYW5kIG9uIGEgZmV3IHJlc3BvbnNlIGxheW91dHM7XFxuKyAqIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuXFxuKyAqXFxuKyAqIE91dCBvZiBzY29wZTogUFNFIGNoaXBzIHRoYXQgYXJlIGludGVyZmFjZWQgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdFxcbisgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sXFxuKyAqIGZhbWlseSwgYW5kIFxcXCJkdW1iIFBTRVxcXCIgbW9kZXMgd2hlcmUgbm8gaG9zdCBjb250cm9sIGlzIHdpcmVkIHVwIGF0IGFsbC5cXG4rICpcXG4rICogVGhpcyBjb3JlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCwgZGVjb2RpbmcvZW5jb2Rpbmcgb2YgTUNVXFxuKyAqIHJlc3BvbnNlcywgYW5kIHRoZSBwc2VfY29udHJvbGxlcl9vcHMgaW50ZWdyYXRpb24uIFRyYW5zcG9ydCBtb2R1bGVzXFxuKyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2XFxuKyAqIGNhbGxiYWNrcy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pbm1heC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwicmVhbHRlay1wc2UtbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOEJcXHRcXHQweDAxMzhcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlcXHRcXHQweDAwMzlcXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDXFx0XFx0MHgwMTM5XFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9CQ001OTExMVxcdFxcdDB4ZTExMVxcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjFcXHRcXHQweGUxMjFcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEXFx0XFx0MHgwMFxcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkdcXHRcXHQweDAxXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcXHRcXHQweDAyXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1RcXHRcXHRcXHQweDAzXFx0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUXFx0XFx0MHgwNFxcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVFxcdFxcdDB4MDVcXHQvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1xcdFxcdDB4MDZcXG4rXFxuKy8qIFJUUFNFX01DVV9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFIHZhbHVlcyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1BXX0xJTUlUX1RZUEVfVVNFUlxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX01BWF9QT1JUU1xcdFxcdFxcdDQ4XFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXFx0XFx0M1xcbitcXG4rZW51bSBydHBzZV9tY3VfY21kIHtcXG4rXFx0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxcbitcXHRSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GTyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJRyxcXG4rXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9FTkFCTEUsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVCxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXFxuK1xcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTLFxcbitcXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcXG4rXFx0UlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHLFxcbitcXG4rXFx0UlRQU0VfTUNVX05VTV9DTURTLFxcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUge1xcbitcXHR1OCBvcDtcXG4rXFx0Ym9vbCB2YWxpZDtcXG4rfTtcXG4rXFxuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QKG9wYylcXHR7IC5vcCA9IChvcGMpLCAudmFsaWQgPSB0cnVlIH1cXG4rXFxuKy8qIFBhcnNlZCBNQ1UgcmVzcG9uc2Ugc3RydWN0dXJlcyAoZGVjb2RlZCBmcm9tIHJ0cHNlX21jdV9tc2cgcmVwbGllcykgKi9cXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XFxuK1xcdHU4IG1heF9wb3J0cztcXG4rXFx0Ym9vbCBzeXN0ZW1fZW5hYmxlO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1OCBzd192ZXI7XFxuK1xcdHU4IG1jdV90eXBlO1xcbitcXHR1OCBjb25maWdfc3RhdHVzO1xcbitcXHR1OCBleHRfdmVyO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnIHtcXG4rXFx0dTggdXZsbztcXG4rXFx0dTggb3ZsbztcXG4rXFx0Ym9vbCBwcmVhbGxvY19lbmFibGU7XFxuK1xcdHU4IG51bV9vZl9wc2VzO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyB7XFxuK1xcdHU4IHN0czE7XFxuK1xcdHU4IHN0czI7XFxuK1xcdHU4IHN0czM7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfbWVhc3VyZW1lbnQge1xcbitcXHR1MTYgdm9sdGFnZV9yYXc7XFx0LyogNjQuNDVtVi9MU0IgKi9cXG4rXFx0dTE2IGN1cnJlbnRfcmF3O1xcdC8qIDFtQS9MU0IgKi9cXG4rXFx0dTE2IHRlbXBlcmF0dXJlX3JhdztcXHQvKiBUKG1DKSA9IDEyNTAgKiAoMjIwIC0gcmF3KSAqL1xcbitcXHR1MTYgcG93ZXJfcmF3O1xcdFxcdC8qIDEwMG1XL0xTQiAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyB7XFxuK1xcdGJvb2wgZW5hYmxlO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcge1xcbitcXHR1OCBtYXhfcG93ZXI7XFxuK1xcdHU4IHByaW9yaXR5O1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgb3Bjb2RlW1JUUFNFX01DVV9OVU1fQ01EU107XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcXG4rXFx0ICogZGlhbGVjdCBzdXBwbGllcyBpdHMgb3duLiBPdGhlciByZXNwb25zZXMgc2hhcmUgb25lIGxheW91dCBhbmQgYXJlXFxuK1xcdCAqIGRlY29kZWQgZGlyZWN0bHkgLSBhIGRpYWxlY3QgdGhhdCBkaXZlcmdlcyB0aGVyZSBtdXN0IGFkZCBhIGhvb2ssXFxuK1xcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpwYXJzZV9zeXN0ZW1faW5mbykoY29uc3QgdTggKnBheWxvYWQsIHN0cnVjdCBydHBzZV9tY3VfaW5mbyAqaW5mbyk7XFxuK1xcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XFxuK1xcdGNvbnN0IGNoYXIgKigqbWN1X3R5cGVfc3RyKSh1bnNpZ25lZCBpbnQgbWN1X3R5cGUpO1xcbit9O1xcbitcXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8ge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHR1MTYgZGV2aWNlX2lkO1xcbitcXHR1MzIgbWF4X21XX3Blcl9wb3J0O1xcbitcXHRlbnVtIHJ0cHNlX21jdV9jbWQgcHdfc2V0X2NtZDtcXHQvKiBjb21tYW5kIHVzZWQgYnkgc2V0X3B3X2xpbWl0ICovXFxuK1xcdHUzMiBwd19zZXRfbHNiX21XO1xcdFxcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xcbitcXHR1MzIgcHdfcmVhZF9sc2JfbVc7XFx0XFx0LyogTFNCIG9mIGV4dF9jb25maWcubWF4X3Bvd2VyIHJlYWQtYmFjaywgaW4gbVcgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM4Yl9pbmZvID0ge1xcbitcXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QixcXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJSVEw4MjM4QlxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxcbitcXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBydGw4MjM5X2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzksXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiUlRMODIzOVxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDQwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcXG4rXFx0LnB3X3NldF9sc2JfbVcgPSA0MDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHtcXG4rXFx0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUMsXFxuK1xcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcXG4rXFx0Lm5hbWUgPSBcXFwiUlRMODIzOUNcXFwiLFxcbitcXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXFxuK1xcdC5wd19zZXRfY21kID0gUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gNDAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTExX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExLFxcbitcXHQubWF4X21XX3Blcl9wb3J0ID0gMzAwMDAsXFxuK1xcdC5uYW1lID0gXFxcIkJDTTU5MTExXFxcIixcXG4rXFx0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxcbitcXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXFxuK1xcdC5wd19zZXRfbHNiX21XID0gMjAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIGJjbTU5MTIxX2luZm8gPSB7XFxuK1xcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxLFxcbitcXHQvKlxcbitcXHQgKiBCQ001OTEyMSBpcyBhIDYwVyBUeXBlLTMgcGFydCwgYnV0IGtub3duIGJvYXJkcyBydW4gaXQgYXQgODAyLjNhdFxcbitcXHQgKiBhbmQgdGhlIEdlbjEgZGlhbGVjdCBoYXMgb25seSB0aGUgOC1iaXQvMC4yVyBzZXQgY29tbWFuZCAoXFx1MDAzYz01MVcpO1xcbitcXHQgKiBjYXAgYXQgdGhlIDMwVyB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgb2ZmZXJzLlxcbitcXHQgKi9cXG4rXFx0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxcbitcXHQubmFtZSA9IFxcXCJCQ001OTEyMVxcXCIsXFxuK1xcdC5wd19yZWFkX2xzYl9tVyA9IDIwMCxcXG4rXFx0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxcbitcXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcXG4rfTtcXG4rXFxuKy8qIEhlbHBlcnMgYW5kIGJhc2ljIGZ1bmN0aW9ucyAqL1xcbitcXG4rc3RhdGljIHN0cnVjdCBydHBzZV9tY3VfY3RybCAqdG9fcnRwc2VfbWN1X2N0cmwoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHJ0cHNlX21jdV9jdHJsLCBwY2Rldik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9tc2dfaW5pdChzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqbXNnLCB1OCBvcGNvZGUpXFxuK3tcXG4rXFx0bWVtc2V0KG1zZywgMHhmZiwgc2l6ZW9mKCptc2cpKTtcXG4rXFx0bXNnLVxcdTAwM2VvcGNvZGUgPSBvcGNvZGU7XFxuK31cXG4rXFxuK3N0YXRpYyB1OCBydHBzZV9tY3VfY2hlY2tzdW0oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHR1OCBzdW0gPSAwO1xcbitcXG4rXFx0d2hpbGUgKGxlbi0tKVxcbitcXHRcXHRzdW0gKz0gKmJ1ZisrO1xcbitcXHRyZXR1cm4gc3VtO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwc2UtXFx1MDAzZW11dGV4KSB7XFxuK1xcdFxcdC8qIFJvbGxpbmcgc2VxX251bSBzbyBhIGxhdGUgcmVwbHkgY2FuJ3QgcGFzcyBhcyBhIGxhdGVyIG9uZS4gKi9cXG4rXFx0XFx0cmVxLVxcdTAwM2VzZXFfbnVtID0gcHNlLVxcdTAwM2VzZXErKztcXG4rXFx0XFx0cmVxLVxcdTAwM2VjaGVja3N1bSA9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpO1xcbitcXG4rXFx0XFx0cmV0ID0gcHNlLVxcdTAwM2V0cmFuc3BvcnQtXFx1MDAzZXNlbmQocHNlLCByZXEpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIE1DVSBuZWVkcyBhIGZpeGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gcmVjZWl2aW5nIGEgcmVxdWVzdFxcbitcXHRcXHQgKiBhbmQgaGF2aW5nIHRoZSByZXNwb25zZSByZWFkeSwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGVzIGdldCB0b1xcbitcXHRcXHQgKiB1cy4gUGFjZSB0aGUgdHJhbnNhY3Rpb24gaGVyZSBzbyBlYWNoIHRyYW5zcG9ydCBjYW4ga2VlcCBpdHMgcmVjdlxcbitcXHRcXHQgKiBwYXRoIHNpbXBsZTogYSBzaW5nbGUgYm91bmRlZCB3YWl0IHJhdGhlciB0aGFuIGEgZ2VuZXJpYyByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1zbGVlcChSVFBTRV9NQ1VfUkVTUE9OU0VfTVMpO1xcbitcXG4rXFx0XFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xcbitcXHRcXHRyZXQgPSBwc2UtXFx1MDAzZXRyYW5zcG9ydC1cXHUwMDNlcmVjdihwc2UsIHJlcSwgcmVzcCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4cGxpY2l0IE1DVSBlcnJvciBvcGNvZGVzIChvYnNlcnZlZCBvbiB0aGUgR2VuMSBkaWFsZWN0OyBoYXJtbGVzc1xcbitcXHQgKiB0byBjaGVjayBmb3IgR2VuMiB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQ1xcbitcXHQgKiBtaXNtYXRjaCBwYXRoIHNvIGNhbGxlcnMgc2VlIGEgbWVhbmluZ2Z1bCBlcnJuby5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAocmVzcC1cXHUwMDNlb3Bjb2RlKSB7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFOlxcbitcXHRcXHRyZXR1cm4gLUVCQURFO1xcbitcXHRjYXNlIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU06XFxuK1xcdFxcdHJldHVybiAtRUJBRE1TRztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX05PVF9SRUFEWTpcXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXNwLVxcdTAwM2VvcGNvZGUgIT0gcmVxLVxcdTAwM2VvcGNvZGUgfHxcXG4rXFx0ICAgIHJlc3AtXFx1MDAzZXNlcV9udW0gIT0gcmVxLVxcdTAwM2VzZXFfbnVtIHx8XFxuK1xcdCAgICByZXNwLVxcdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXFxuK1xcdFxcdHJldHVybiAtRUJBRE1TRztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3Bjb2RlKTtcXG4rXFx0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2RvX3hmZXIocHNlLCBcXHUwMDI2cmVxLCByZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChyZXNwLVxcdTAwM2VwYXlsb2FkWzBdICE9IHBvcnQpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfY21kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLCB1OCBhcmcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cnRwc2VfbWN1X21zZ19pbml0KFxcdTAwMjZyZXEsIG9wY29kZSk7XFxuK1xcdHJlcS5wYXlsb2FkWzBdID0gcG9ydDtcXG4rXFx0cmVxLnBheWxvYWRbMV0gPSBhcmc7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChyZXNwLnBheWxvYWRbMF0gIT0gcG9ydCB8fCByZXNwLnBheWxvYWRbMV0gIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogR2xvYmFsIG9wZXJhdGlvbnMgKi9cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9pbmZvKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3BjLVxcdTAwM2VvcCk7XFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VwYXJzZV9zeXN0ZW1faW5mbyhyZXNwLnBheWxvYWQsIGluZm8pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyAqY29uZmlnKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRydHBzZV9tY3VfbXNnX2luaXQoXFx1MDAyNnJlcSwgb3BjLVxcdTAwM2VvcCk7XFxuK1xcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2V1dmxvID0gcmVzcC5wYXlsb2FkWzBdO1xcbitcXHRjb25maWctXFx1MDAzZW92bG8gPSByZXNwLnBheWxvYWRbNV07XFxuK1xcdGNvbmZpZy1cXHUwMDNlcHJlYWxsb2NfZW5hYmxlID0gKHJlc3AucGF5bG9hZFsxXSA9PSAweDEpO1xcbitcXHRjb25maWctXFx1MDAzZW51bV9vZl9wc2VzID0gcmVzcC5wYXlsb2FkWzZdO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJ0cHNlX21jdV9tc2dfaW5pdChcXHUwMDI2cmVxLCBvcGMtXFx1MDAzZW9wKTtcXG4rXFx0cmVxLnBheWxvYWRbMF0gPSBlbmFibGUgPyAweDEgOiAweDA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFxcdTAwMjZyZXEsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAocmVzcC5wYXlsb2FkWzBdID09IDB4MCkgPyAwIDogLUVJTztcXG4rfVxcbitcXG4rLyogUG9ydCBvcGVyYXRpb25zICovXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHN0YXR1cy1cXHUwMDNlc3RzMSA9IHJlc3AucGF5bG9hZFsxXTtcXG4rXFx0c3RhdHVzLVxcdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xcbitcXHRzdGF0dXMtXFx1MDAzZXN0czMgPSByZXNwLnBheWxvYWRbM107XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIFxcdTAwMjZyZXNwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG1lYXN1cmVtZW50LVxcdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cmVzcC5wYXlsb2FkWzFdKTtcXG4rXFx0bWVhc3VyZW1lbnQtXFx1MDAzZWN1cnJlbnRfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZyZXNwLnBheWxvYWRbM10pO1xcbitcXHRtZWFzdXJlbWVudC1cXHUwMDNldGVtcGVyYXR1cmVfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZyZXNwLnBheWxvYWRbNV0pO1xcbitcXHRtZWFzdXJlbWVudC1cXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFxcdTAwMjZyZXNwLnBheWxvYWRbN10pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddO1xcbitcXHRpZiAoIW9wYy1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVxcdTAwM2VvcCwgXFx1MDAyNnJlc3ApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2VlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0b3BjID0gXFx1MDAyNnBzZS1cXHUwMDNlZGlhbGVjdC1cXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJR107XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXFx1MDAzZW9wLCBcXHUwMDI2cmVzcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRjb25maWctXFx1MDAzZW1heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTtcXG4rXFx0Y29uZmlnLVxcdTAwM2Vwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XFxuK1xcbitcXHRvcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV07XFxuK1xcdGlmICghb3BjLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cXHUwMDNlb3AsIGVuYWJsZSA/IDB4MSA6IDB4MCk7XFxuK31cXG4rXFxuKy8qIFBTRSBjb250cm9sbGVyIG9wcyAqL1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyBjb25maWc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHBzZSwgaWQsIFxcdTAwMjZjb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0YWRtaW5fc3RhdGUtXFx1MDAzZWMzM19hZG1pbl9zdGF0ZSA9IGNvbmZpZy5lbmFibGUgPyBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRU5BQkxFRCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBzZV9wd19zdGF0dXMgKnB3X3N0YXR1cylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyBzdGF0dXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFxcdTAwMjZzdGF0dXMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOlxcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfU0VBUkNISU5HO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfREVMSVZFUklORzpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19URVNUOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVEVTVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0ZBVUxUOlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfRkFVTFQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19PVEhFUl9GQVVMVDpcXG4rXFx0XFx0cHdfc3RhdHVzLVxcdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX09USEVSRkFVTFQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwd19zdGF0dXMtXFx1MDAzZWMzM19wd19zdGF0dXMgPSBFVEhUT09MX0MzM19QU0VfUFdfRF9TVEFUVVNfVU5LTk9XTjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9zdGF0dXMocHNlLCBpZCwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBzdHMyIGhvbGRzIHRoZSBjbGFzcyBvbmx5IGluIHRoZSBvcGVyYXRpb25hbCBzdGF0ZXMgYmVsb3cuIEluIGFcXG4rXFx0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XFxuK1xcdCAqIGRvZXMgbm90LCBzbyB0aGVyZSBpcyBubyBjbGFzcyB0byByZXBvcnQgYW5kIHdlIHJldHVybiAwLiBUaGF0IGlzXFxuK1xcdCAqIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGNsYXNzLTAgUEQ7IHVzZXJzcGFjZSBkaXNhbWJpZ3VhdGVzXFxuK1xcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxcbitcXHQgKi9cXG4rXFx0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfU0VBUkNISU5HOlxcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxcbitcXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxcbitcXHRcXHRyZXR1cm4gcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VwYXJzZV9wb3J0X2NsYXNzKFxcdTAwMjZzdGF0dXMpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFxcdTAwMjZtZWFzdXJlbWVudCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiAxMDBtVyBwZXIgTFNCICovXFxuK1xcdHJldHVybiBtZWFzdXJlbWVudC5wb3dlcl9yYXcgKiAxMDBVO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcXG4rXFx0aW50IHJldDtcXG4rXFx0dTMyIHVWO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X21lYXN1cmVtZW50KHBzZSwgaWQsIFxcdTAwMjZtZWFzdXJlbWVudCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiA2NC40NW1WIHBlciBMU0IgKi9cXG4rXFx0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcXG4rXFx0cmV0dXJuIG1pbl90KHUzMiwgdVYsIElOVF9NQVgpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2VuYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHJldHVybiBydHBzZV9tY3VfcG9ydF9zZXRfc3RhdGUodG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpLCBpZCwgZmFsc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyBjb25maWc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcXHUwMDI2Y29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVxcdTAwM2VjaGlwLVxcdTAwM2Vwd19yZWFkX2xzYl9tVztcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgaW50IG1heF9tVylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqdHlwZV9vcGMsICp2YWxfb3BjO1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXAgPSBwc2UtXFx1MDAzZWNoaXA7XFxuK1xcdHU4IHByZ192YWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAobWF4X21XIFxcdTAwM2MgMCB8fCBtYXhfbVcgXFx1MDAzZSBjaGlwLVxcdTAwM2VtYXhfbVdfcGVyX3BvcnQpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0dHlwZV9vcGMgPSBcXHUwMDI2cHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXTtcXG4rXFx0dmFsX29wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtjaGlwLVxcdTAwM2Vwd19zZXRfY21kXTtcXG4rXFx0LyogcHdfc2V0X2xzYl9tVyBpcyB0aGUgZGl2aXNvciBiZWxvdzsgcmVqZWN0IGEgY2hpcCB0aGF0IGxhY2tzIGl0LiAqL1xcbitcXHRpZiAoIXR5cGVfb3BjLVxcdTAwM2V2YWxpZCB8fCAhdmFsX29wYy1cXHUwMDNldmFsaWQgfHwgIWNoaXAtXFx1MDAzZXB3X3NldF9sc2JfbVcpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN3aXRjaCB0aGUgcG9ydCB0byB1c2VyLWRlZmluZWQgbGltaXQgbW9kZSBmaXJzdCwgdGhlbiBwcm9ncmFtIHRoZVxcbitcXHQgKiBsaW1pdCB2YWx1ZS4gSWYgdGhlIHNlY29uZCBjbWQgZmFpbHMsIHRoZSBwb3J0IGlzIGxlZnQgaW5cXG4rXFx0ICogdXNlci1kZWZpbmVkIG1vZGUgYnV0IHdpdGggdGhlIHByZXZpb3VzIGxpbWl0IHZhbHVlOyB0aGUgbmV4dFxcbitcXHQgKiBzdWNjZXNzZnVsIHNldF9wd19saW1pdCBjYWxsIHJlY292ZXJzIGl0LlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHR5cGVfb3BjLVxcdTAwM2VvcCwgUlRQU0VfTUNVX1BPUlRfUFdfTElNSVRfVFlQRV9VU0VSKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXFx1MDAzZXB3X3NldF9sc2JfbVcsIFU4X01BWCk7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHZhbF9vcGMtXFx1MDAzZW9wLCBwcmdfdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwc2VfcHdfbGltaXRfcmFuZ2VzICpvdXQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBldGh0b29sX2MzM19wc2VfcHdfbGltaXRfcmFuZ2UgKnJhbmdlO1xcbitcXG4rXFx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UpO1xcbitcXHRpZiAoIXJhbmdlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJhbmdlWzBdLm1pbiA9IDA7XFxuK1xcdHJhbmdlWzBdLm1heCA9IHBzZS1cXHUwMDNlY2hpcC1cXHUwMDNlbWF4X21XX3Blcl9wb3J0O1xcbitcXG4rXFx0b3V0LVxcdTAwM2VjMzNfcHdfbGltaXRfcmFuZ2VzID0gcmFuZ2U7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9leHRfY29uZmlnKHBzZSwgaWQsIFxcdTAwMjZjb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGNvbmZpZy5wcmlvcml0eTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJpbylcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcXG4rXFxuK1xcdGlmIChwcmlvIFxcdTAwM2UgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdG9wYyA9IFxcdTAwMjZwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXTtcXG4rXFx0aWYgKCFvcGMtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIG9wYy1cXHUwMDNlb3AsIHByaW8pO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0ge1xcbitcXHQucGlfZ2V0X2FkbWluX3N0YXRlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlLFxcbitcXHQucGlfZ2V0X3B3X3N0YXR1cyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXMsXFxuK1xcdC5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsXFxuK1xcdC5waV9nZXRfYWN0dWFsX3B3ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyxcXG4rXFx0LnBpX2VuYWJsZSA9IHJ0cHNlX21jdV9wb3J0X2VuYWJsZSxcXG4rXFx0LnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLFxcbitcXHQucGlfZ2V0X3ZvbHRhZ2UgPSBydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZSxcXG4rXFx0LnBpX2dldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdCxcXG4rXFx0LnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCxcXG4rXFx0LnBpX2dldF9wd19saW1pdF9yYW5nZXMgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzLFxcbitcXHQucGlfZ2V0X3ByaW8gPSBydHBzZV9tY3VfcG9ydF9nZXRfcHJpbyxcXG4rXFx0LnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnO1xcbitcXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXFxuK1xcdCAqICgtRU5YSU8gLyAtRVJFTU9URUlPKSwgcmVwb3J0IG5vdC1yZWFkeSAoLUVBR0FJTiksIG9yIGVtaXQgYVxcbitcXHQgKiBjb3JydXB0L3BhcnRpYWwgZnJhbWUgKC1FQkFETVNHIC8gLUVCQURFKS4gUmV0cnkgdGhvc2Ugd2l0aGluIGFcXG4rXFx0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXFxuK1xcdCAqIGltbWVkaWF0ZWx5LlxcbitcXHQgKi9cXG4rXFx0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRyZXQgPSBydHBzZV9tY3VfZ2V0X2luZm8ocHNlLCBpbmZvKTtcXG4rXFx0XFx0aWYgKHJldCAhPSAtRVRJTUVET1VUIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU5YSU8gXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FUkVNT1RFSU8gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHJldCAhPSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUJBRE1TRyBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVCQURFKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0bXNsZWVwKFJUUFNFX01DVV9CT09UX1JFVFJZX01TKTtcXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIHJldCwgXFxcImZhaWxlZCB0byByZWFkIE1DVSBpbmZvXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHN3aXRjaCAoaW5mby1cXHUwMDNlZGV2aWNlX2lkKSB7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNnJ0bDgyMzhiX2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOTpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNnJ0bDgyMzlfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5QzpcXG4rXFx0XFx0cHNlLVxcdTAwM2VjaGlwID0gXFx1MDAyNnJ0bDgyMzljX2luZm87XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XFxuK1xcdFxcdHBzZS1cXHUwMDNlY2hpcCA9IFxcdTAwMjZiY201OTExMV9pbmZvO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxOlxcbitcXHRcXHRwc2UtXFx1MDAzZWNoaXAgPSBcXHUwMDI2YmNtNTkxMjFfaW5mbztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCAtRUlOVkFMLCBcXFwidW5rbm93biBQU0UgaWQgMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VkZXZpY2VfaWQpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZW1heF9wb3J0cyB8fCBpbmZvLVxcdTAwM2VtYXhfcG9ydHMgXFx1MDAzZSBSVFBTRV9NQ1VfTUFYX1BPUlRTKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiTUNVIHJlcG9ydHMgaW52YWxpZCBwb3J0IGNvdW50ICV1XFxcXG5cXFwiLCBpbmZvLVxcdTAwM2VtYXhfcG9ydHMpO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgXFx1MDAyNmV4dF9jb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcXFxcblxcXCIpO1xcbitcXG4rXFx0ZGV2X2luZm8ocHNlLVxcdTAwM2VkZXYsIFxcXCIlcyBNQ1UsICVzIChpZCAweCUwNHgpLCAldSBwb3J0cyBhY3Jvc3MgJXUgUFNFIGNoaXAocylcXFxcblxcXCIsXFxuK1xcdFxcdCBwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZW1jdV90eXBlX3N0cihpbmZvLVxcdTAwM2VtY3VfdHlwZSksIHBzZS1cXHUwMDNlY2hpcC1cXHUwMDNlbmFtZSxcXG4rXFx0XFx0IGluZm8tXFx1MDAzZWRldmljZV9pZCwgaW5mby1cXHUwMDNlbWF4X3BvcnRzLCBleHRfY29uZmlnLm51bV9vZl9wc2VzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nbG9iYWxfZGlzYWJsZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gZGF0YTtcXG4rXFxuK1xcdHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHBzZSwgZmFsc2UpO1xcbit9XFxuK1xcbitpbnQgcnRwc2VfbWN1X3JlZ2lzdGVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfaW5mbyBpbmZvO1xcbitcXHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHJ0cHNlX21jdV9tc2cpICE9IFJUUFNFX01DVV9NU0dfU0laRSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX211dGV4X2luaXQocHNlLVxcdTAwM2VkZXYsIFxcdTAwMjZwc2UtXFx1MDAzZW11dGV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFtYXRjaClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVxcdTAwM2VkZXYsIC1FTk9ERVYsIFxcXCJtaXNzaW5nIG1hdGNoIGRhdGFcXFxcblxcXCIpO1xcbitcXHRwc2UtXFx1MDAzZWRpYWxlY3QgPSBtYXRjaC1cXHUwMDNlZGlhbGVjdDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhdGNoIGEgZGlhbGVjdCB0aGF0IGZvcmdvdCB0byBzZXQgb25lIG9mIHRoZSByZXF1aXJlZCBob29rcyBhdFxcbitcXHQgKiBwcm9iZSB0aW1lLCByYXRoZXIgdGhhbiBOVUxMLWRlcmVmJ2luZyBsYXRlciBmcm9tIGEgZmFzdCBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwc2UtXFx1MDAzZWRpYWxlY3QgfHxcXG4rXFx0ICAgICFwc2UtXFx1MDAzZWRpYWxlY3QtXFx1MDAzZXBhcnNlX3N5c3RlbV9pbmZvIHx8XFxuK1xcdCAgICAhcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VwYXJzZV9wb3J0X2NsYXNzIHx8XFxuK1xcdCAgICAhcHNlLVxcdTAwM2VkaWFsZWN0LVxcdTAwM2VtY3VfdHlwZV9zdHIpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJkaWFsZWN0IGZvciBjaGlwIGlzIGluY29tcGxldGVcXFxcblxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVsZWFzZSB0aGUgTUNVIGZyb20gcmVzZXQgYmVmb3JlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbjsgdGhlXFxuK1xcdCAqIGJvb3QtcmV0cnkgbG9vcCBpbiBkaXNjb3ZlcigpIHdhaXRzIGZvciBpdCB0byBhbnN3ZXIuXFxuK1xcdCAqL1xcbitcXHRncGlvZCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHBzZS1cXHUwMDNlZGV2LCBcXFwicmVzZXRcXFwiLCBHUElPRF9PVVRfTE9XKTtcXG4rXFx0aWYgKElTX0VSUihncGlvZCkpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCByZXNldCBncGlvXFxcXG5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNvbWUgYm9hcmRzIGdhdGUgYWxsIHBvcnRzIHRocm91Z2ggYSBoYXJkd2FyZSBsaW5lOyBkZWFzc2VydCBpdCBzb1xcbitcXHQgKiB0aGUgTUNVIHByb3RvY29sIGdvdmVybnMgcGVyLXBvcnQgYWRtaW4gc3RhdGUgZnJvbSBoZXJlIG9uLlxcbitcXHQgKi9cXG4rXFx0Z3Bpb2QgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXFx1MDAzZWRldiwgXFxcImRpc2FibGUtcG9ydHNcXFwiLCBHUElPRF9PVVRfTE9XKTtcXG4rXFx0aWYgKElTX0VSUihncGlvZCkpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBkaXNhYmxlLXBvcnRzIGdwaW9cXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gcnRwc2VfbWN1X2Rpc2NvdmVyKHBzZSwgXFx1MDAyNmluZm8pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKCFpbmZvLnN5c3RlbV9lbmFibGUpIHtcXG4rXFx0XFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcXG4rXFx0XFx0LyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEdlbjEpIHJldHVyblxcbitcXHRcXHQgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyBcXFwibm8gc2VwYXJhdGUgZW5hYmxlIHJlcXVpcmVkXFxcIi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXFx1MDAzZWRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIFBTRSBzeXN0ZW1cXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoIXJldCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUsIHBzZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50XFxuK1xcdCAqIGZvciBldmVyeSBib2FyZCksIGl0IGlzbid0IGtub3duIHdoZXRoZXIgdGhlIFBvRSBzdWJzeXN0ZW0gaXMgYWN0aXZlIG9yXFxuK1xcdCAqIGluYWN0aXZlIGJ5IGRlZmF1bHQuIEF0IHRoaXMgc3RhZ2UsIHRoZSBQU0UgY2hpcHMgbWlnaHQgYWxyZWFkeSBkZWxpdmVyXFxuK1xcdCAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuXFxuK1xcdCAqL1xcbitcXG4rXFx0LyogcGNkZXYub3duZXIgaXMgc2V0IGJ5IHRoZSB0cmFuc3BvcnQsIHNvIHRoZSByZWdpc3RlcmVkIGNvbnRyb2xsZXJcXG4rXFx0ICogcGlucyB0aGUgdHJhbnNwb3J0IG1vZHVsZSB0aGF0IG93bnMgdGhlIGxpdmUgZGV2aWNlLCBub3QgdGhlIGNvcmUuXFxuK1xcdCAqL1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2Lm9wcyAgICAgID0gXFx1MDAyNnJ0cHNlX21jdV9vcHM7XFxuK1xcdHBzZS1cXHUwMDNlcGNkZXYuZGV2ICAgICAgPSBwc2UtXFx1MDAzZWRldjtcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi50eXBlcyAgICA9IEVUSFRPT0xfUFNFX0MzMztcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5ucl9saW5lcyA9IGluZm8ubWF4X3BvcnRzO1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWTtcXG4rXFx0cHNlLVxcdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcXG4rXFxuK1xcdHJldHVybiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBzZS1cXHUwMDNlZGV2LCBcXHUwMDI2cHNlLVxcdTAwM2VwY2Rldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X3JlZ2lzdGVyKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0aW5mby1cXHUwMDNlbWF4X3BvcnRzID0gcGF5bG9hZFsxXTtcXG4rXFx0aW5mby1cXHUwMDNlc3lzdGVtX2VuYWJsZSA9IChwYXlsb2FkWzJdID09IDB4MSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdC8qIENsYXNzIGxpdmVzIGluIHRoZSB1cHBlciBuaWJibGUgb2Ygc3RzMi4gKi9cXG4rXFx0cmV0dXJuIEZJRUxEX0dFVChHRU5NQVNLKDcsIDQpLCBzdGF0dXMtXFx1MDAzZXN0czIpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqcnRwc2VfbWN1X2dlbjJfbWN1X3R5cGVfc3RyKHVuc2lnbmVkIGludCBtY3VfdHlwZSlcXG4re1xcbitcXHRzd2l0Y2ggKG1jdV90eXBlKSB7XFxuK1xcdGNhc2UgMHgwMDpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYzMTBcXFwiO1xcbitcXHRjYXNlIDB4MDE6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJGMjMwXFxcIjtcXG4rXFx0Y2FzZSAweDAyOlxcdHJldHVybiBcXFwiR2lnYURldmljZSBHRDMyRjMwM1xcXCI7XFxuK1xcdGNhc2UgMHgwMzpcXHRyZXR1cm4gXFxcIkdpZ2FEZXZpY2UgR0QzMkYxMDNcXFwiO1xcbitcXHRjYXNlIDB4MDQ6XFx0cmV0dXJuIFxcXCJHaWdhRGV2aWNlIEdEMzJFMTAzXFxcIjtcXG4rXFx0Y2FzZSAweDEwOlxcdHJldHVybiBcXFwiTnV2b3RvbiBNMDUxNlxcXCI7XFxuK1xcdGNhc2UgMHgxMTpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1NjRcXFwiO1xcbitcXHRjYXNlIDB4MTI6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE5VQzAyOVxcXCI7XFxuK1xcdGRlZmF1bHQ6XFx0cmV0dXJuIFxcXCJ1bmtub3duXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9zeXN0ZW1faW5mbyhjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxcbit7XFxuK1xcdGluZm8tXFx1MDAzZW1heF9wb3J0cyA9IHBheWxvYWRbMV07XFxuK1xcdC8qIEdlbjEgaGFzIG5vIGV4cGxpY2l0IHN5c3RlbV9lbmFibGUgYnl0ZTsgdGhlIGNsb3Nlc3QgYW5hbG9nIGlzIHRoZVxcbitcXHQgKiBcXFwicmVtb3RlIGVuYWJsZVxcXCIgYml0IGluIHRoZSBzeXN0ZW0tc3RhdHVzIGZsYWdzIGF0IHBheWxvYWRbN10uXFxuK1xcdCAqL1xcbitcXHRpbmZvLVxcdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcXHUwMDI2IEJJVCgyKSk7XFxuK1xcdGluZm8tXFx1MDAzZWRldmljZV9pZCA9IGdldF91bmFsaWduZWRfYmUxNihcXHUwMDI2cGF5bG9hZFszXSk7XFxuK1xcdGluZm8tXFx1MDAzZXN3X3ZlciA9IHBheWxvYWRbNV07XFxuK1xcdGluZm8tXFx1MDAzZW1jdV90eXBlID0gcGF5bG9hZFs2XTtcXG4rXFx0aW5mby1cXHUwMDNlY29uZmlnX3N0YXR1cyA9IHBheWxvYWRbN107XFxuK1xcdGluZm8tXFx1MDAzZWV4dF92ZXIgPSBwYXlsb2FkWzhdO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3BvcnRfY2xhc3MoY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9wb3J0X3N0YXR1cyAqc3RhdHVzKVxcbit7XFxuK1xcdC8qIEdlbjEgcHV0cyB0aGUgZGV0ZWN0ZWQgY2xhc3MgaW4gcGF5bG9hZFszXSAoPT0gc3RzMykgZGlyZWN0bHkuXFxuK1xcdCAqIE1hc2sgdG8gdGhlIGxvdyBuaWJibGU7IGNsYXNzIGlzIDAuLjggYW5kIGFueSBoaWdoIGJpdHMgd291bGQgYmVcXG4rXFx0ICogbm9pc2UuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gc3RhdHVzLVxcdTAwM2VzdHMzIFxcdTAwMjYgMHgwZjtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4xX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXFxuK3tcXG4rXFx0c3dpdGNoIChtY3VfdHlwZSkge1xcbitcXHRjYXNlIDB4MDA6XFx0cmV0dXJuIFxcXCJTVCBNaWNybyBTVDMyRjEwMFxcXCI7XFxuK1xcdGNhc2UgMHgwMTpcXHRyZXR1cm4gXFxcIk51dm90b24gTTA1eHggTEFOXFxcIjtcXG4rXFx0Y2FzZSAweDAyOlxcdHJldHVybiBcXFwiU1QgTWljcm8gU1RGMDMwQzhcXFwiO1xcbitcXHRjYXNlIDB4MDM6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE0wNThTQU5cXFwiO1xcbitcXHRjYXNlIDB4MDQ6XFx0cmV0dXJuIFxcXCJOdXZvdG9uIE5VQzEyMlxcXCI7XFxuK1xcdGRlZmF1bHQ6XFx0cmV0dXJuIFxcXCJ1bmtub3duXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBNYXAgZWFjaCBsb2dpY2FsIGNvbW1hbmQgdGhlIGNvcmUgaXNzdWVzIHRvIGl0cyBwZXItZGlhbGVjdCBvcGNvZGUuICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiA9IHtcXG4rXFx0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X2dlbjJfcGFyc2Vfc3lzdGVtX2luZm8sXFxuK1xcdC5wYXJzZV9wb3J0X2NsYXNzICA9IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3BvcnRfY2xhc3MsXFxuK1xcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cixcXG4rXFx0Lm9wY29kZSA9IHtcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfU0VUX0dMT0JBTF9TVEFURV1cXHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4NDApLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDRhKSxcXG4rXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfRU5BQkxFXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MDEpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9UWVBFXSA9IFJUUFNFX01DVV9PUCgweDEyKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRdXFx0PSBSVFBTRV9NQ1VfT1AoMHgxMyksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVF0gPSBSVFBTRV9NQ1VfT1AoMHgxNCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BSSU9SSVRZXVxcdD0gUlRQU0VfTUNVX09QKDB4MTUpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHg0MiksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1BPV0VSX1NUQVRTXVxcdD0gUlRQU0VfTUNVX09QKDB4NDQpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHg0OCksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0VYVF9DT05GSUddXFx0PSBSVFBTRV9NQ1VfT1AoMHg0OSksXFxuK1xcdH0sXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0IHJ0cHNlX21jdV9kaWFsZWN0X2dlbjEgPSB7XFxuK1xcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvLFxcbitcXHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzLFxcbitcXHQubWN1X3R5cGVfc3RyICAgICAgPSBydHBzZV9tY3VfZ2VuMV9tY3VfdHlwZV9zdHIsXFxuK1xcdC5vcGNvZGUgPSB7XFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX0dFVF9TWVNURU1fSU5GT11cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDIwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXFx0XFx0PSBSVFBTRV9NQ1VfT1AoMHgyYiksXFxuK1xcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cXHRcXHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV0gPSBSVFBTRV9NQ1VfT1AoMHgxNSksXFxuK1xcdFxcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUXVxcdD0gUlRQU0VfTUNVX09QKDB4MTYpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cXHQ9IFJUUFNFX01DVV9PUCgweDFhKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfU1RBVFVTXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MjEpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cXHQ9IFJUUFNFX01DVV9PUCgweDMwKSxcXG4rXFx0XFx0W1JUUFNFX01DVV9DTURfUE9SVF9HRVRfQ09ORklHXVxcdFxcdD0gUlRQU0VfTUNVX09QKDB4MjUpLFxcbitcXHRcXHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVxcdD0gUlRQU0VfTUNVX09QKDB4MjYpLFxcbitcXHR9LFxcbit9O1xcbitcXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGEgPSB7XFxuK1xcdC5kaWFsZWN0ID0gXFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjEsXFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4xX2RhdGEpO1xcbitcXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2RhdGEgPSB7XFxuK1xcdC5kaWFsZWN0ID0gXFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXFxuK307XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2RhdGEpO1xcbitcXG4rLyogU2FtZSBkaWFsZWN0IGFzIGdlbjIsIGJ1dCB0aGUgTUNVIGV4cGVjdHMgcmF3LUkyQyBmcmFtaW5nLiAqL1xcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgPSB7XFxuK1xcdC5kaWFsZWN0ID0gXFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXFxuK1xcdC5uYXRpdmVfaTJjID0gdHJ1ZSxcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTF9HUEwocnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoY29yZSlcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWkyYy5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmUxMGY4YzYzM2I2OGVjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcXG5AQCAtMCwwICsxLDE3MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pMmMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInJlYWx0ZWstcHNlLW1jdS5oXFxcIlxcbitcXG4rLypcXG4rICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc29cXG4rICogdGhlIHJlc3BvbnNlIGlzIG5vcm1hbGx5IHJlYWR5IG9uIHRoZSB2ZXJ5IGZpcnN0IHJlYWQuIEZvciBjb21tYW5kcyB0aGVcXG4rICogTUNVIHByb2R1Y2VzIG1vcmUgc2xvd2x5LCBrZWVwIHBvbGxpbmcgYXQgdGhlIHR5cGljYWwgcmVzcG9uc2UgY2FkZW5jZVxcbisgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TXFx0UlRQU0VfTUNVX1JFU1BPTlNFX01TXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVNcXHQoUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUyAvIFJUUFNFX01DVV9JMkNfUkVUUllfTVMpXFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSlcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXFx1MDAzZWRldik7XFxuK1xcbitcXHQvKiBTZW5kIG9wY29kZSBhcyBTTUJ1cyBjb21tYW5kIGJ5dGU7IHJlbWFpbmluZyAxMSBieXRlcyBhcyBibG9jayBkYXRhICovXFxuK1xcdHJldHVybiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCByZXEtXFx1MDAzZW9wY29kZSwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgKHU4ICopcmVxICsgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVxcdTAwM2VkZXYpO1xcbitcXHRpbnQgdHJpZXMsIHJldDtcXG4rXFxuK1xcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XFxuK1xcdFxcdGlmICh0cmllcyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdG1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTtcXG4rXFxuK1xcdFxcdC8qIE1DVSBuZWVkcyAweDAwIGFzIGNvbW1hbmQgYnl0ZSBmb3IgcmVhZCAqL1xcbitcXHRcXHRyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIDB4MDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAodTggKilyZXNwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFxcdTAwMjZcXHUwMDI2IHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyBydHBzZV9tY3VfaTJjX3NtYnVzX29wcyA9IHtcXG4rXFx0LnNlbmQgPSBydHBzZV9tY3VfaTJjX3NtYnVzX3NlbmQsXFxuK1xcdC5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cXHUwMDNlZGV2KTtcXG4rXFx0dm9pZCAqYnVmO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogaTJjX21hc3Rlcl9zZW5kKCkgbWF5IERNQSwgc28gdGhlIGJ1ZmZlciBtdXN0IG5vdCBiZSBvbiB0aGUgc3RhY2suICovXFxuK1xcdGJ1ZiA9IGttZW1kdXAocmVxLCBSVFBTRV9NQ1VfTVNHX1NJWkUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJ1ZilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XFxuK1xcdGtmcmVlKGJ1Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gcmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSA/IDAgOiAtRUlPO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXFxuK3tcXG4rXFx0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVxcdTAwM2VkZXYpO1xcbitcXHRpbnQgdHJpZXMsIHJldDtcXG4rXFx0dTggKmJ1ZjtcXG4rXFxuK1xcdC8qIGkyY19tYXN0ZXJfcmVjdigpIG1heSBETUEsIHNvIHJlYWQgaW50byBhbiBvZmYtc3RhY2sgYnVmZmVyLiAqL1xcbitcXHRidWYgPSBrbWFsbG9jKFJUUFNFX01DVV9NU0dfU0laRSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghYnVmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcXHUwMDNjIFJUUFNFX01DVV9JMkNfTUFYX1RSSUVTOyB0cmllcysrKSB7XFxuK1xcdFxcdGlmICh0cmllcyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdG1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTtcXG4rXFxuK1xcdFxcdHJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUlRQU0VfTUNVX01TR19TSVpFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSkge1xcbitcXHRcXHRcXHRtZW1jcHkocmVzcCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpO1xcbitcXHRcXHRcXHRpZiAocnRwc2VfbWN1X3Jlc3BfaXNfZmluYWwocmVxLCByZXNwKSkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0ID0gLUVUSU1FRE9VVDtcXG4rb3V0OlxcbitcXHRrZnJlZShidWYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV9pMmNfbmF0aXZlX29wcyA9IHtcXG4rXFx0LnNlbmQgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kLFxcbitcXHQucmVjdiA9IHJ0cHNlX21jdV9pMmNfbmF0aXZlX3JlY3YsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlO1xcbitcXHRib29sIHVzZV9uYXRpdmU7XFxuK1xcbitcXHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xcbitcXHRpZiAoIW1hdGNoKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFxcXCJtaXNzaW5nIG1hdGNoIGRhdGFcXFxcblxcXCIpO1xcbitcXG4rXFx0LyogVGhlIGZyYW1pbmcgKHJhdyBJMkMgdnMgU01CdXMpIGlzIGNhcnJpZWQgYnkgdGhlIG1hdGNoIGRhdGEuICovXFxuK1xcdHVzZV9uYXRpdmUgPSBtYXRjaC1cXHUwMDNlbmF0aXZlX2kyYztcXG4rXFx0aWYgKHVzZV9uYXRpdmUpIHtcXG4rXFx0XFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXFx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVPUE5PVFNVUFAsXFxuK1xcdFxcdFxcdFxcdFxcXCJwbGFpbi1JMkMgTUNVIHByb3RvY29sIHJlcXVpcmVzIEkyQy1jYXBhYmxlIGFkYXB0ZXJcXFxcblxcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cXHUwMDNlYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcXG4rXFx0XFx0XFx0XFx0XFxcIlNNQnVzIE1DVSBwcm90b2NvbCByZXF1aXJlcyBTTUJ1cyBJMkMtYmxvY2sgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdHBzZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHNlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBzZS1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRwc2UtXFx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XFxuK1xcdHBzZS1cXHUwMDNldHJhbnNwb3J0ID0gdXNlX25hdGl2ZSA/IFxcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcXHUwMDI2cnRwc2VfbWN1X2kyY19zbWJ1c19vcHM7XFxuK1xcbitcXHRyZXR1cm4gcnRwc2VfbWN1X3JlZ2lzdGVyKHBzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1xcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1xcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4yX2RhdGEgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1pMmNcXFwiLCAuZGF0YSA9IFxcdTAwMjZydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YSB9LFxcbitcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRwc2VfbWN1X2kyY19vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRwc2VfbWN1X2kyY19kcml2ZXIgPSB7XFxuK1xcdC5kcml2ZXIgPSB7XFxuK1xcdFxcdC5uYW1lXFx0XFx0PSBcXFwicmVhbHRlay1wc2UtbWN1LWkyY1xcXCIsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZVxcdD0gcnRwc2VfbWN1X2kyY19vZl9tYXRjaCxcXG4rXFx0fSxcXG4rXFx0LnByb2JlXFx0XFx0PSBydHBzZV9tY3VfaTJjX3Byb2JlLFxcbit9O1xcbittb2R1bGVfaTJjX2RyaXZlcihydHBzZV9tY3VfaTJjX2RyaXZlcik7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKb25hcyBKZWxvbmVrIFxcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChJMkMgdHJhbnNwb3J0KVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtdWFydC5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YmFhMTdkOGQzMWZhMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xcbkBAIC0wLDAgKzEsMTY0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGxldGlvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VyZGV2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwicmVhbHRlay1wc2UtbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVFxcdDE5MjAwXFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVFxcdG1zZWNzX3RvX2ppZmZpZXMoMTAwKVxcbisjZGVmaW5lIFJUUFNFX01DVV9VQVJUX1JYX1RJTUVPVVRcXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQge1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgcHNlO1xcbitcXHRzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2O1xcbitcXHRzdHJ1Y3QgY29tcGxldGlvbiByeF9kb25lO1xcbitcXHRzcGlubG9ja190IHJ4X2xvY2s7XFx0XFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cXG4rXFx0c2l6ZV90IHJ4X2xlbjtcXG4rXFx0dTggcnhfYnVmW1JUUFNFX01DVV9NU0dfU0laRV07XFxuK307XFxuK1xcbisjZGVmaW5lIHRvX3J0cHNlX21jdV91YXJ0KHApICBjb250YWluZXJfb2YocCwgc3RydWN0IHJ0cHNlX21jdV91YXJ0LCBwc2UpXFxuK1xcbisvKlxcbisgKiBObyBmcmFtaW5nIGlzIGRvbmUgaGVyZTogYSBnbGl0Y2hlZCBmcmFtZSBjb3N0cyBvbmUgdHJhbnNhY3Rpb24sIHRoZW5cXG4rICogdGhlIG5leHQgX3NlbmQgcmUtZnJhbWVzIGZyb20gcnhfbGVuIDAuIFJlc3luYyB3b3JrcyBieSByZXR1cm5pbmcgY291bnRcXG4rICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZFxcbisgKiBpbnRvIHRoZSBuZXh0IGZyYW1lLlxcbisgKi9cXG4rc3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gc2VyZGV2X2RldmljZV9nZXRfZHJ2ZGF0YShzZXJkZXYpO1xcbitcXHRzaXplX3QgdGFrZTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKSB7XFxuK1xcdFxcdHRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtXFx1MDAzZXJ4X2J1ZikgLSBjdHgtXFx1MDAzZXJ4X2xlbik7XFxuK1xcdFxcdGlmICh0YWtlKSB7XFxuK1xcdFxcdFxcdG1lbWNweShjdHgtXFx1MDAzZXJ4X2J1ZiArIGN0eC1cXHUwMDNlcnhfbGVuLCBidWYsIHRha2UpO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXJ4X2xlbiArPSB0YWtlO1xcbitcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9sZW4gPT0gc2l6ZW9mKGN0eC1cXHUwMDNlcnhfYnVmKSlcXG4rXFx0XFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmN0eC1cXHUwMDNlcnhfZG9uZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogY29uc3VtZSBhbGwgdG8gYXZvaWQgZGVzeW5jL21pc2FsaWdubWVudCAqL1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgcnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyA9IHtcXG4rXFx0LnJlY2VpdmVfYnVmID0gcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZSxcXG4rXFx0LndyaXRlX3dha2V1cCA9IHNlcmRldl9kZXZpY2Vfd3JpdGVfd2FrZXVwLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcXG4rXFx0aW50IHdyaXR0ZW47XFxuK1xcbitcXHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jaykge1xcbitcXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyeF9sZW4gPSAwO1xcbitcXHR9XFxuK1xcbitcXHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXFx1MDAzZXNlcmRldiwgKGNvbnN0IHU4ICopcmVxLCBzaXplb2YoKnJlcSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQpO1xcbitcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXHRpZiAod3JpdHRlbiAhPSBzaXplb2YoKnJlcSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcXG4re1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHRvX3J0cHNlX21jdV91YXJ0KHBzZSk7XFxuK1xcbitcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcXHUwMDI2Y3R4LVxcdTAwM2VyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSlcXG4rXFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmN0eC1cXHUwMDNlcnhfbG9jaykge1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRcXHRtZW1jcHkocmVzcCwgY3R4LVxcdTAwM2VyeF9idWYsIHNpemVvZigqcmVzcCkpO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHJ0cHNlX21jdV91YXJ0X3RyYW5zcG9ydF9vcHMgPSB7XFxuK1xcdC5zZW5kID0gcnRwc2VfbWN1X3VhcnRfc2VuZCxcXG4rXFx0LnJlY3YgPSBydHBzZV9tY3VfdWFydF9yZWN2LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydHBzZV9tY3VfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxcbit7XFxuK1xcdHUzMiBzcGVlZCA9IFJUUFNFX01DVV9VQVJUX0JBVURfREVGQVVMVDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnNlcmRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eDtcXG4rXFx0dW5zaWduZWQgaW50IGJhdWQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRjdHgtXFx1MDAzZXNlcmRldiA9IHNlcmRldjtcXG4rXFx0Y3R4LVxcdTAwM2Vwc2UuZGV2ID0gZGV2O1xcbitcXHRjdHgtXFx1MDAzZXBzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xcbitcXHRjdHgtXFx1MDAzZXBzZS50cmFuc3BvcnQgPSBcXHUwMDI2cnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcztcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2RvbmUpO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2VyeF9sb2NrKTtcXG4rXFxuK1xcdHNlcmRldl9kZXZpY2Vfc2V0X2RydmRhdGEoc2VyZGV2LCBjdHgpO1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9jbGllbnRfb3BzKHNlcmRldiwgXFx1MDAyNnJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9zZXJkZXZfZGV2aWNlX29wZW4oZGV2LCBzZXJkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBvcGVuIHNlcmRldlxcXFxuXFxcIik7XFxuK1xcbitcXHRmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCBcXFwiY3VycmVudC1zcGVlZFxcXCIsIFxcdTAwMjZzcGVlZCk7XFxuK1xcbitcXHRiYXVkID0gc2VyZGV2X2RldmljZV9zZXRfYmF1ZHJhdGUoc2VyZGV2LCBzcGVlZCk7XFxuK1xcdGlmIChiYXVkICE9IHNwZWVkKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJjb3VsZCBub3Qgc2V0IGJhdWRyYXRlICV1LCBjb250cm9sbGVyIHVzZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBzcGVlZCwgYmF1ZCk7XFxuK1xcbitcXHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woc2VyZGV2LCBmYWxzZSk7XFxuK1xcbitcXHRyZXQgPSBzZXJkZXZfZGV2aWNlX3NldF9wYXJpdHkoc2VyZGV2LCBTRVJERVZfUEFSSVRZX05PTkUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJjb3VsZCBub3Qgc2V0IHBhcml0eSB0byBub25lOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFxuK1xcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXFx1MDAyNmN0eC1cXHUwMDNlcHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMVxcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMlxcXCIsIC5kYXRhID0gXFx1MDAyNnJ0cHNlX21jdV9nZW4yX2RhdGEgfSxcXG4rXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9kcml2ZXIgcnRwc2VfbWN1X3VhcnRfZHJpdmVyID0ge1xcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJyZWFsdGVrLXBzZS1tY3UtdWFydFxcXCIsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZSA9IHJ0cHNlX21jdV91YXJ0X29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmUgID0gcnRwc2VfbWN1X3VhcnRfcHJvYmUsXFxuK307XFxuK21vZHVsZV9zZXJkZXZfZGV2aWNlX2RyaXZlcihydHBzZV9tY3VfdWFydF9kcml2ZXIpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSm9uYXMgSmVsb25layBcXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMGEzMTk3YzljOWNkMWRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXFxuQEAgLTAsMCArMSw4OSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbitcXG4rI2lmbmRlZiBfUkVBTFRFS19QU0VfTUNVX0hcXG4rI2RlZmluZSBfUkVBTFRFS19QU0VfTUNVX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxcbisgKiByZXNwb25zZSByZWFkeS4gVGhlc2UgYXJlIHByb3BlcnRpZXMgb2YgdGhlIE1DVSBmaXJtd2FyZSwgbm90IG9mIHRoZVxcbisgKiB1bmRlcmx5aW5nIHRyYW5zcG9ydDogdGhlIGNvcmUgcGFjZXMgdHJhbnNhY3Rpb25zIGJ5IFJUUFNFX01DVV9SRVNQT05TRV9NU1xcbisgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXFxuKyAqIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMsIHNpbmNlIHNvbWUgY29tbWFuZHMgYXJlIGRvY3VtZW50ZWQgYXNcXG4rICogbmVlZGluZyB1cCB0byB+MXMgdG8gcHJvZHVjZSBhIHJlcGx5LlxcbisgKi9cXG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcXHRcXHRcXHQyNVxcbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVNcXHRcXHQxMDAwXFxuK1xcbisvKlxcbisgKiBUb3RhbCB0aW1lIHRvIGtlZXAgcmV0cnlpbmcgdGhlIGZpcnN0IE1DVSByZWFkIGF0IHByb2JlLCBhbmQgdGhlIHBhdXNlXFxuKyAqIGJldHdlZW4gYXR0ZW1wdHMuIFJpZ2h0IGFmdGVyIGVuYWJsZS1ncGlvcyBpcyBhc3NlcnRlZCB0aGUgTUNVIG1heSBub3RcXG4rICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcXG4rICogZGVjbGFyaW5nIHRoZSBwcm9iZSBmYWlsZWQuXFxuKyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcXHRcXHQzMDAwXFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVNcXHRcXHRcXHQxMDBcXG4rXFxuKyNkZWZpbmUgUlRQU0VfTUNVX01TR19TSVpFXFx0XFx0XFx0MTJcXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfbXNnIHtcXG4rXFx0dTggb3Bjb2RlO1xcbitcXHR1OCBzZXFfbnVtO1xcbitcXHR1OCBwYXlsb2FkWzldO1xcbitcXHR1OCBjaGVja3N1bTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qXFxuKyAqIE1DVSBzdGF0dXMgb3Bjb2RlcyAoc2VlbiBvbiB0aGUgR2VuMSBkaWFsZWN0OyBHZW4yIG5ldmVyIGVtaXRzIHRoZW0pLlxcbisgKiBJTkNPTVBMRVRFL0JBRF9DU1VNIGFyZSB0ZXJtaW5hbDsgTk9UX1JFQURZIGlzIHRyYW5zaWVudC5cXG4rICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFXFx0XFx0MHhmZFxcdC8qIC1FQkFERSAgICovXFxuKyNkZWZpbmUgUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTVxcdFxcdDB4ZmVcXHQvKiAtRUJBRE1TRyAqL1xcbisjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZXFx0XFx0MHhmZlxcdC8qIC1FQUdBSU4gICovXFxuK1xcbisvKiBBIHBvbGxpbmcgdHJhbnNwb3J0IGNhbiBzdG9wIGhlcmU6IHRoZSBtYXRjaGluZyByZXBseSwgb3IgYSB0ZXJtaW5hbCBlcnJvci4gKi9cXG4rc3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxcbit7XFxuK1xcdHJldHVybiByZXNwLVxcdTAwM2VvcGNvZGUgPT0gcmVxLVxcdTAwM2VvcGNvZGUgfHxcXG4rXFx0ICAgICAgIHJlc3AtXFx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEUgfHxcXG4rXFx0ICAgICAgIHJlc3AtXFx1MDAzZW9wY29kZSA9PSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNO1xcbit9XFxuK1xcbisvKiBPcGFxdWUgdG8gdHJhbnNwb3J0czsgZGVmaW5lZCBpbiByZWFsdGVrLXBzZS1jb3JlLmMuICovXFxuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdDtcXG4rc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm87XFxuK3N0cnVjdCBydHBzZV9tY3VfY3RybDtcXG4rXFxuKy8qIFBlci1jb21wYXRpYmxlIG1hdGNoIGRhdGEgKHRoZSBvZl9tYXRjaCAuZGF0YSkuICovXFxuK3N0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSB7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCAqZGlhbGVjdDtcXG4rXFx0Ym9vbCBuYXRpdmVfaTJjO1xcdC8qIHJhdy1JMkMgZnJhbWluZyAodnMgU01CdXMpOyBJMkMgdHJhbnNwb3J0IG9ubHkgKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyB7XFxuK1xcdGludCAoKnNlbmQpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKTtcXG4rXFx0aW50ICgqcmVjdikoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcCk7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XFxuK1xcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogc2VyaWFsaXplcyBNQ1UgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMgKi9cXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzICp0cmFuc3BvcnQ7XFxuK1xcdHU4IHNlcTtcXHRcXHRcXHQvKiByb2xsaW5nIHJlcXVlc3Qgc2VxX251bSwgZWNob2VkIGJ5IHRoZSBNQ1UgKi9cXG4rfTtcXG4rXFxuK2ludCBydHBzZV9tY3VfcmVnaXN0ZXIoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UpO1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2RhdGE7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGE7XFxuK1xcbisjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDE6MTU6MTguNTYwNTc5MzE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzA5MDgzNzcyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9JMkNcIixcbiAgICBcIlBTRV9SRUFMVEVLX01DVV9VQVJUXCIsXG4gICAgXCJTRVJJQUxfREVWX0JVU1wiLFxuICAgIFwiSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRwc2VfbWN1X3JlZ2lzdGVyXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X2kyY19wcm9iZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF92b2x0YWdlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9lbmFibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2Rpc2FibGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UsIHN1cHBvcnRpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gVGhlIGRyaXZlciBleHBvc2VzIFBTRSBjb250cm9sbGVyIG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlIHZpYSBldGh0b29sIG5ldGxpbmsgYW5kIHBhcnNlcyBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBvdmVyIEkyQy9VQVJULiBJdCBjYW4gYmUgcHJvYmVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBJMkMgc3lzZnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiODZjMjE2NjIwNTlkYTQ4MWU3MTlhYjlhZGFlYWU4NzdhMDY4MWUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDE6MTU6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BzZS1wZC9yZWFsdGVrLHBzZS1tY3UtZ2VuMS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wZjFhODE5ZGI0OWJiY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxuQEAgLTAsMCArMSwxODAgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogUmVhbHRlayBQU0UgTUNVXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjogfFxuKyAgQSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBtYW5hZ2VzIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudClcbisgIGhhcmR3YXJlIG9uIGEgcmFuZ2Ugb2YgbWFuYWdlZCBQb0Ugc3dpdGNoZXMuIFRoZSBob3N0IENQVSB0YWxrcyBvbmx5IHRvXG4rICB0aGlzIE1DVSAtIG92ZXIgSTJDL1NNQnVzIG9yIFVBUlQgLSB1c2luZyBhIHNtYWxsIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7XG4rICB0aGUgUFNFIHNpbGljb24gaXQgZHJpdmVzIHNpdHMgYmVoaW5kIHRoZSBNQ1UgYW5kIGlzIG5ldmVyIGFjY2Vzc2VkXG4rICBkaXJlY3RseS4gRm9yIGV4YW1wbGUsIG9uIHRoZSBaeXhlbCBHUzE5MDAtMTBIUCB0aGUgU29DIHJlYWNoZXMgdGhlIE1DVVxuKyAgb3ZlciBVQVJULCBhbmQgdGhlIE1DVSBtYW5hZ2VzIHRoZSBvbi1ib2FyZCBQU0UgY2hpcC5cbitcbisgIFRoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIE1DVSB0b2dldGhlciB3aXRoIGl0cyBSZWFsdGVrIGZpcm13YXJlOiB0aGVcbisgIGZpcm13YXJlIGFuZCBpdHMgaG9zdCBwcm90b2NvbCwgd2hpY2ggYXJlIHN0YWJsZSBhY3Jvc3MgYm9hcmRzLiBUaGVcbisgIG1pY3JvY29udHJvbGxlciBzaWxpY29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnQgdGhhdCB2YXJpZXMsIGFuZCB0aGVcbisgIFBTRSBzaWxpY29uIGJlaGluZCB0aGUgTUNVIChSZWFsdGVrIFJUTDgyM3gvUlRMODIzOSogb3IgQnJvYWRjb21cbisgIEJDTTU5eHh4KSBpcyByZXBvcnRlZCBieSB0aGUgTUNVIGFuZCBkZXRlY3RlZCBhdCBydW50aW1lIC0gbmVpdGhlciBpc1xuKyAgbmFtZWQgaGVyZS5cbitcbisgIFR3byBwcm90b2NvbCBnZW5lcmF0aW9ucyBleGlzdCwgYm90aCBSZWFsdGVrJ3M6XG4rICAgIGdlbjEgIG9sZGVyIGJvYXJkcywgd2hlcmUgdGhlIE1DVSBmcm9udHMgQnJvYWRjb20gUFNFIHNpbGljb25cbisgICAgZ2VuMiAgdGhlIGFsdGVyZWQgcHJvdG9jb2wgdXNlZCB3aXRoIFJlYWx0ZWsncyBvd24gUFNFIHNpbGljb25cbitcbisgIE9uIGFuIEkyQyBhdHRhY2htZW50IHRoZSBmcmFtaW5nIHRoZSBNQ1UgZmlybXdhcmUgZXhwZWN0cyBpcyBwYXJ0IG9mIHRoZVxuKyAgY29tcGF0aWJsZTogJy1zbWJ1cycgKHJlYWRzIGNhcnJ5IGEgbGVhZGluZyBjb21tYW5kIGJ5dGUgYW5kIGEgcmVwZWF0ZWRcbisgIHN0YXJ0KSBvciAnLWkyYycgKGJhcmUgYmxvY2sgd3JpdGVzIGFuZCByZWFkcykuIEEgVUFSVCBhdHRhY2htZW50IGNhcnJpZXNcbisgIG5vIGZyYW1pbmcgc3VmZml4OyB0aGUgdHJhbnNwb3J0IGlzIGdpdmVuIGJ5IHRoZSBwYXJlbnQgJ3NlcmlhbCcgbm9kZS5cbitcbisgIEVhY2ggYm9hcmQgYWRkaXRpb25hbGx5IGNhcnJpZXMgYSBkZXZpY2Utc3BlY2lmaWMgY29tcGF0aWJsZSB0aGF0IGZhbGxzXG4rICBiYWNrIHRvIG9uZSBvZiB0aGUgcHJvdG9jb2wgY29tcGF0aWJsZXMgYWJvdmUuIERyaXZlcnMgYmluZCBvbiB0aGVcbisgIHByb3RvY29sIGNvbXBhdGlibGU7IHRoZSBkZXZpY2Utc3BlY2lmaWMgc3RyaW5nIGlkZW50aWZpZXMgdGhlIGJvYXJkIGFuZFxuKyAgcmVzZXJ2ZXMgYSBwbGFjZSBmb3IgYSBmdXR1cmUgcGVyLWJvYXJkIHF1aXJrIHdpdGhvdXQgaGF2aW5nIHRvIHJldHJvZml0XG4rICBkZXZpY2UgdHJlZXMgYWxyZWFkeSBpbiB0aGUgZmllbGQuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIG9uZU9mOlxuKyAgICAgICMgVUFSVFxuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYTEtcHNlXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4xXG4rXG4rICAgICAgIyBJMkMsIFNNQnVzIGZyYW1pbmdcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIHp5eGVsLGdzMTkyMC0yNGhwLXYyLXBzZVxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHBzZS1tY3UtZ2VuMS1zbWJ1c1xuK1xuKyAgICAgICMgVUFSVFxuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0genl4ZWwsZ3MxOTAwLTEwaHAtYjEtcHNlXG4rICAgICAgICAgICAgICAtIHp5eGVsLHhtZzE5MTUtMTBlcC1wc2VcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjJcbitcbisgICAgICAjIEkyQywgU01CdXMgZnJhbWluZ1xuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0genl4ZWwseHMxOTMwLTEyaHAtcHNlXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXG4rXG4rICAgICAgIyBJMkMsIHJhdyBmcmFtaW5nXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSBsaW5rc3lzLGxnczMyOG1wYy12Mi1wc2VcbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICByZXNldC1ncGlvczpcbisgICAgZGVzY3JpcHRpb246IFJlc2V0IGxpbmUgb2YgdGhlIE1DVS5cbisgICAgbWF4SXRlbXM6IDFcbitcbisgIGRpc2FibGUtcG9ydHMtZ3Bpb3M6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEhhcmR3YXJlIGdhdGUgdGhhdCBmb3JjZXMgYWxsIHBvcnRzIGludG8gYWRtaW4tZGlzYWJsZWQgc3RhdGUgd2hpbGVcbisgICAgICBhc3NlcnRlZC5cbisgICAgbWF4SXRlbXM6IDFcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBwc2UtY29udHJvbGxlci55YW1sI1xuKyAgLSAkcmVmOiAvc2NoZW1hcy9zZXJpYWwvc2VyaWFsLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbisgICMgQSAnLXNtYnVzJy8nLWkyYycgY29tcGF0aWJsZSBpcyBhbiBJMkMgYXR0YWNobWVudDogaXQgaGFzICdyZWcnIGFuZFxuKyAgIyBjYW5ub3QgY2Fycnkgc2VyaWFsIGJ1cyBwcm9wZXJ0aWVzLiBBIGJhcmUgZ2VuIGNvbXBhdGlibGUgaXMgYSBVQVJUXG4rICAjIGF0dGFjaG1lbnQ6IG5vICdyZWcnLCB0aGUgdHJhbnNwb3J0IGNvbWVzIGZyb20gdGhlIHBhcmVudCBzZXJpYWwgbm9kZS5cbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnRhaW5zOlxuKyAgICAgICAgICAgIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4xLXNtYnVzXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4yLXNtYnVzXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1xuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSByZWdcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY3VycmVudC1zcGVlZDogZmFsc2VcbisgICAgICAgIG1heC1zcGVlZDogZmFsc2VcbisgICAgZWxzZTpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOiBmYWxzZVxuK1xuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgICMgU01CdXMtZnJhbWVkIEkyQyBhdHRhY2htZW50XG4rICAtIHxcbisgICAgaTJjIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwienl4ZWwseHMxOTMwLTEyaHAtcHNlXCIsIFwicmVhbHRlayxwc2UtbWN1LWdlbjItc21idXNcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MweDIwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgIHBzZS1waXMge1xuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgICAgICAgICAgcHNlLXBpQDAge1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICNwc2UtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICB9O1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuK1xuKyAgIyBSYXctSTJDLWZyYW1lZCBhdHRhY2htZW50XG4rICAtIHxcbisgICAgaTJjIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBzZUAyMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwibGlua3N5cyxsZ3MzMjhtcGMtdjItcHNlXCIsIFwicmVhbHRlayxwc2UtbWN1LWdlbjItaTJjXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgyMFx1MDAzZTtcbitcbisgICAgICAgICAgICBwc2UtcGlzIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIHBzZS1waUAwIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAjcHNlLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisgICMgVUFSVCBhdHRhY2htZW50XG4rICAtIHxcbisgICAgc2VyaWFsIHtcbisgICAgICAgIGV0aGVybmV0LXBzZSB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwienl4ZWwsZ3MxOTAwLTEwaHAtYTEtcHNlXCIsIFwicmVhbHRlayxwc2UtbWN1LWdlbjFcIjtcbisgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gXHUwMDNjMTkyMDBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgcHNlLXBpcyB7XG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBwc2UtcGlAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgI3BzZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNjBjZmYwMDk1M2RjYmUuLjE2MTM2YWMxMWUwNjM3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMjI3MzYsNiArMjI3MzYsMTMgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0aW5jbHVkZS9zb3VuZC9ydCouaFxuIEY6XHRzb3VuZC9zb2MvY29kZWNzL3J0KlxuIFxuK1JFQUxURUsgUFNFIE1DVSBEUklWRVJcbitNOlx0Sm9uYXMgSmVsb25layBcdTAwM2NqZWxvbmVrLmpvbmFzQGdtYWlsLmNvbVx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wc2UtcGQvcmVhbHRlayxwc2UtbWN1LWdlbjEueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1KlxuK1xuIFJFQUxURUsgT1RUTyBXQVRDSERPR1xuIE06XHRTYW5kZXIgVmFuaGV1bGUgXHUwMDNjc2FuZGVyQHN2YW5oZXVsZS5uZXRcdTAwM2VcbiBMOlx0bGludXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcgYi9kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xuaW5kZXggN2VmMjk2NTdlZTVkZDEuLmEwZjJhZTY2OGM2N2M4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXG5AQCAtMTMsNiArMTMsMzQgQEAgbWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuIFxuIGlmIFBTRV9DT05UUk9MTEVSXG4gXG4rY29uZmlnIFBTRV9SRUFMVEVLX01DVVxuK1x0dHJpc3RhdGVcbitcdGhlbHBcbitcdCAgU2hhcmVkIGNvcmUgZm9yIHRoZSBSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyLiBUaGlzIGlzIHNlbGVjdGVkXG4rXHQgIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRyYW5zcG9ydCBvcHRpb25zIGJlbG93LlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfSTJDXG4rXHR0cmlzdGF0ZSBcIlJlYWx0ZWsgUFNFIE1DVSBkcml2ZXIgKEkyQyB0cmFuc3BvcnQpXCJcbitcdGRlcGVuZHMgb24gSTJDXG4rXHRzZWxlY3QgUFNFX1JFQUxURUtfTUNVXG4rXHRoZWxwXG4rXHQgIERyaXZlciBmb3IgdGhlIG1pY3JvY29udHJvbGxlciAoTUNVKSB0aGF0IGZyb250cyB0aGUgUFNFXG4rXHQgIGhhcmR3YXJlIG9uIHZhcmlvdXMgUmVhbHRlay1iYXNlZCBtYW5hZ2VkIHN3aXRjaGVzLCBhdHRhY2hlZFxuK1x0ICB2aWEgSTJDL1NNQnVzLiBUaGUgTUNVIGV4cG9zZXMgYSBtZXNzYWdlLWJhc2VkIHByb3RvY29sOyB0aGUgYWN0dWFsXG4rXHQgIFBTRSBzaWxpY29uIGlzIG5vdCBhY2Nlc3NlZCBkaXJlY3RseS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhXG4rXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWFsdGVrLXBzZS1tY3UtaTJjLlxuK1xuK2NvbmZpZyBQU0VfUkVBTFRFS19NQ1VfVUFSVFxuK1x0dHJpc3RhdGUgXCJSZWFsdGVrIFBTRSBNQ1UgZHJpdmVyIChVQVJUIHRyYW5zcG9ydClcIlxuK1x0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xuK1x0c2VsZWN0IFBTRV9SRUFMVEVLX01DVVxuK1x0aGVscFxuK1x0ICBEcml2ZXIgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgKE1DVSkgdGhhdCBmcm9udHMgdGhlIFBTRVxuK1x0ICBoYXJkd2FyZSBvbiB2YXJpb3VzIFJlYWx0ZWstYmFzZWQgbWFuYWdlZCBzd2l0Y2hlcywgYXR0YWNoZWRcbitcdCAgdmlhIFVBUlQuIFRoZSBNQ1UgZXhwb3NlcyBhIG1lc3NhZ2UtYmFzZWQgcHJvdG9jb2w7IHRoZSBhY3R1YWwgUFNFXG4rXHQgIHNpbGljb24gaXMgbm90IGFjY2Vzc2VkIGRpcmVjdGx5LiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGFcbitcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlYWx0ZWstcHNlLW1jdS11YXJ0LlxuK1xuIGNvbmZpZyBQU0VfUkVHVUxBVE9SXG4gXHR0cmlzdGF0ZSBcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwiXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlXG5pbmRleCBjYzc4ZjdlYTdmNWY3MS4uOWNjYTU5MDBmZTM0MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVxuQEAgLTMsNiArMyw5IEBAXG4gXG4gb2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXG4gXG4rb2JqLSQoQ09ORklHX1BTRV9SRUFMVEVLX01DVSkgKz0gcmVhbHRlay1wc2UtbWN1LWNvcmUub1xuK29iai0kKENPTkZJR19QU0VfUkVBTFRFS19NQ1VfSTJDKSArPSByZWFsdGVrLXBzZS1tY3UtaTJjLm9cbitvYmotJChDT05GSUdfUFNFX1JFQUxURUtfTUNVX1VBUlQpICs9IHJlYWx0ZWstcHNlLW1jdS11YXJ0Lm9cbiBvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgKz0gcHNlX3JlZ3VsYXRvci5vXG4gb2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSArPSBwZDY5MngwLm9cbiBvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgyMDRjYjQzMGZmZWE4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LWNvcmUuY1xuQEAgLTAsMCArMSw5ODkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogRHJpdmVyIGZvciB0aGUgbWljcm9jb250cm9sbGVyIChNQ1UpIGZyb250aW5nIFBTRSBzaWxpY29uIG9uIHZhcmlvdXNcbisgKiBSZWFsdGVrLWJhc2VkIG1hbmFnZWQgc3dpdGNoZXMuIFRoZSBNQ1Ugc3BlYWtzIGEgMTItYnl0ZSBmaXhlZC1mcmFtZVxuKyAqIG1hbmFnZW1lbnQgcHJvdG9jb2w7IHRoaXMgZHJpdmVyIGNvdmVycyB0d28gZ2VuZXJhdGlvbnMgb2YgdGhlXG4rICogcHJvdG9jb2wgdmlhIGEgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCByZXNwb25zZSBwYXJzZXJzLlxuKyAqXG4rICogTWFueSBQb0Ugc3dpdGNoIGRlc2lnbnMgcHV0IGEgZGVkaWNhdGVkIG1pY3JvY29udHJvbGxlciBpbiBmcm9udCBvZiB0aGVcbisgKiBhY3R1YWwgUFNFIHNpbGljb246IHRoZSBob3N0IENQVSB0YWxrcyB0byB0aGUgTUNVIG92ZXIgSTJDL1NNQnVzIG9yXG4rICogVUFSVCwgYW5kIHRoZSBNQ1UgaW4gdHVybiBtYW5hZ2VzIHRoZSBQU0UgY2hpcHMgb24gdGhlIGJvYXJkLiBUaGUgTUNVXG4rICogc3BlYWtzIGEgc21hbGwgbWVzc2FnZS1iYXNlZCBwcm90b2NvbC4gVGhlIFBTRSBjaGlwcyB0aGVtc2VsdmVzIGFyZSBub3RcbisgKiBhY2Nlc3NlZCBkaXJlY3RseTsgZXZlcnl0aGluZyBnb2VzIHRocm91Z2ggTUNVIGNvbW1hbmRzLlxuKyAqXG4rICogVGhpcyBkcml2ZXIgdGFyZ2V0cyB0aGF0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFJlYWx0ZWstZmFtaWx5IHByb3RvY29sLlxuKyAqIFR3byBnZW5lcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiBHZW4xIGJlaW5nIHVzZWQgb24gb2xkZXIgc3dpdGNoZXMgd2hlcmVcbisgKiB0aGUgTUNVIGZyb250cyBhbmQgbWFuYWdlcyBCcm9hZGNvbSBQU0Ugc2lsaWNvbjsgR2VuMiBiZWluZyB1c2VkIHdpdGhcbisgKiBSZWFsdGVrIFBTRSBzaWxpY29uLiBUaGUgdHdvIHNoYXJlIGZyYW1lIGZvcm1hdCBhbmQgYSBzdW0tbW9kLTI1NlxuKyAqIGNoZWNrc3VtIGJ1dCBkaXZlcmdlIG9uIG9wY29kZSBudW1iZXJzIGFuZCBvbiBhIGZldyByZXNwb25zZSBsYXlvdXRzO1xuKyAqIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgcGVyLWRpYWxlY3Qgb3Bjb2RlIHRhYmxlIGFuZCBwYXJzZXIgaG9va3MuXG4rICpcbisgKiBPdXQgb2Ygc2NvcGU6IFBTRSBjaGlwcyB0aGF0IGFyZSBpbnRlcmZhY2VkIGRpcmVjdGx5IGZyb20gdGhlIGhvc3RcbisgKiB3aXRob3V0IGEgbWFuYWdlbWVudCBNQ1UsIE1DVSBkZXNpZ25zIHRoYXQgc3BlYWsgYW4gdW5yZWxhdGVkIHByb3RvY29sXG4rICogZmFtaWx5LCBhbmQgXCJkdW1iIFBTRVwiIG1vZGVzIHdoZXJlIG5vIGhvc3QgY29udHJvbCBpcyB3aXJlZCB1cCBhdCBhbGwuXG4rICpcbisgKiBUaGlzIGNvcmUgbW9kdWxlIGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBkZWNvZGluZy9lbmNvZGluZyBvZiBNQ1VcbisgKiByZXNwb25zZXMsIGFuZCB0aGUgcHNlX2NvbnRyb2xsZXJfb3BzIGludGVncmF0aW9uLiBUcmFuc3BvcnQgbW9kdWxlc1xuKyAqIChyZWFsdGVrLXBzZS1tY3UtaTJjLCByZWFsdGVrLXBzZS1tY3UtdWFydCkgcHJvdmlkZSB0aGUgc2VuZC9yZWN2XG4rICogY2FsbGJhY2tzLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJyZWFsdGVrLXBzZS1tY3UuaFwiXG4rXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzhCXHRcdDB4MDEzOFxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5XHRcdDB4MDAzOVxuKyNkZWZpbmUgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5Q1x0XHQweDAxMzlcbisjZGVmaW5lIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTFcdFx0MHhlMTExXG4rI2RlZmluZSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTIxXHRcdDB4ZTEyMVxuK1xuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RJU0FCTEVEXHRcdDB4MDBcbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19TRUFSQ0hJTkdcdFx0MHgwMVxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkdcdFx0MHgwMlxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1RcdFx0XHQweDAzXHQvKiBHZW4xLW9ubHk7IHJlc2VydmVkIG9uIEdlbjIgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9QT1JUX1NUU19GQVVMVFx0XHQweDA0XG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfT1RIRVJfRkFVTFRcdFx0MHgwNVx0LyogR2VuMS1vbmx5OyByZXNlcnZlZCBvbiBHZW4yICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9TVFNfUkVRVUVTVElOR1x0XHQweDA2XG4rXG4rLyogUlRQU0VfTUNVX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEUgdmFsdWVzICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVJcdDB4MDJcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NQVhfUE9SVFNcdFx0XHQ0OFxuKyNkZWZpbmUgUlRQU0VfTUNVX1BPUlRfTUFYX1BSSU9SSVRZXHRcdDNcbitcbitlbnVtIHJ0cHNlX21jdV9jbWQge1xuK1x0UlRQU0VfTUNVX0NNRF9TRVRfR0xPQkFMX1NUQVRFLFxuK1x0UlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk8sXG4rXHRSVFBTRV9NQ1VfQ01EX0dFVF9FWFRfQ09ORklHLFxuK1xuK1x0UlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRSxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX0VYVCxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUFJJT1JJVFksXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX1NUQVRVUyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFMsXG4rXHRSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJRyxcbitcdFJUUFNFX01DVV9DTURfUE9SVF9HRVRfRVhUX0NPTkZJRyxcbitcbitcdFJUUFNFX01DVV9OVU1fQ01EUyxcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlIHtcbitcdHU4IG9wO1xuK1x0Ym9vbCB2YWxpZDtcbit9O1xuK1xuKy8qIFNob3J0aGFuZCBmb3IgdGhlIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZW50cmllcyBpbiBkaWFsZWN0IG9wY29kZSB0YWJsZXMuICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1Aob3BjKVx0eyAub3AgPSAob3BjKSwgLnZhbGlkID0gdHJ1ZSB9XG4rXG4rLyogUGFyc2VkIE1DVSByZXNwb25zZSBzdHJ1Y3R1cmVzIChkZWNvZGVkIGZyb20gcnRwc2VfbWN1X21zZyByZXBsaWVzKSAqL1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfaW5mbyB7XG4rXHR1OCBtYXhfcG9ydHM7XG4rXHRib29sIHN5c3RlbV9lbmFibGU7XG4rXHR1MTYgZGV2aWNlX2lkO1xuK1x0dTggc3dfdmVyO1xuK1x0dTggbWN1X3R5cGU7XG4rXHR1OCBjb25maWdfc3RhdHVzO1xuK1x0dTggZXh0X3Zlcjtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyB7XG4rXHR1OCB1dmxvO1xuK1x0dTggb3ZsbztcbitcdGJvb2wgcHJlYWxsb2NfZW5hYmxlO1xuK1x0dTggbnVtX29mX3BzZXM7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHtcbitcdHU4IHN0czE7XG4rXHR1OCBzdHMyO1xuK1x0dTggc3RzMztcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCB7XG4rXHR1MTYgdm9sdGFnZV9yYXc7XHQvKiA2NC40NW1WL0xTQiAqL1xuK1x0dTE2IGN1cnJlbnRfcmF3O1x0LyogMW1BL0xTQiAqL1xuK1x0dTE2IHRlbXBlcmF0dXJlX3JhdztcdC8qIFQobUMpID0gMTI1MCAqICgyMjAgLSByYXcpICovXG4rXHR1MTYgcG93ZXJfcmF3O1x0XHQvKiAxMDBtVy9MU0IgKi9cbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcge1xuK1x0Ym9vbCBlbmFibGU7XG4rfTtcbitcbitzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfZXh0X2NvbmZpZyB7XG4rXHR1OCBtYXhfcG93ZXI7XG4rXHR1OCBwcmlvcml0eTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCB7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSBvcGNvZGVbUlRQU0VfTUNVX05VTV9DTURTXTtcbitcbitcdC8qXG4rXHQgKiBSZXNwb25zZSBwYXJzZXJzIGZvciB0aGUgZmllbGRzIHRoYXQgZGlmZmVyIGJldHdlZW4gZGlhbGVjdHM7IGVhY2hcbitcdCAqIGRpYWxlY3Qgc3VwcGxpZXMgaXRzIG93bi4gT3RoZXIgcmVzcG9uc2VzIHNoYXJlIG9uZSBsYXlvdXQgYW5kIGFyZVxuK1x0ICogZGVjb2RlZCBkaXJlY3RseSAtIGEgZGlhbGVjdCB0aGF0IGRpdmVyZ2VzIHRoZXJlIG11c3QgYWRkIGEgaG9vayxcbitcdCAqIGFzIGEgbWlzbWF0Y2hlZCBsYXlvdXQgY2Fubm90IGJlIGRldGVjdGVkICh0aGUgY2hlY2tzdW0gc3RpbGwgcGFzc2VzKS5cbitcdCAqL1xuK1x0dm9pZCAoKnBhcnNlX3N5c3RlbV9pbmZvKShjb25zdCB1OCAqcGF5bG9hZCwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKTtcbitcdGludCAoKnBhcnNlX3BvcnRfY2xhc3MpKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cyk7XG4rXHRjb25zdCBjaGFyICooKm1jdV90eXBlX3N0cikodW5zaWduZWQgaW50IG1jdV90eXBlKTtcbit9O1xuK1xuK3N0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHR1MTYgZGV2aWNlX2lkO1xuK1x0dTMyIG1heF9tV19wZXJfcG9ydDtcbitcdGVudW0gcnRwc2VfbWN1X2NtZCBwd19zZXRfY21kO1x0LyogY29tbWFuZCB1c2VkIGJ5IHNldF9wd19saW1pdCAqL1xuK1x0dTMyIHB3X3NldF9sc2JfbVc7XHRcdC8qIExTQiBvZiBwd19zZXRfY21kIHZhbHVlLCBpbiBtVyAqL1xuK1x0dTMyIHB3X3JlYWRfbHNiX21XO1x0XHQvKiBMU0Igb2YgZXh0X2NvbmZpZy5tYXhfcG93ZXIgcmVhZC1iYWNrLCBpbiBtVyAqL1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfY2hpcF9pbmZvIHJ0bDgyMzhiX2luZm8gPSB7XG4rXHQuZGV2aWNlX2lkID0gUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QixcbitcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbitcdC5uYW1lID0gXCJSVEw4MjM4QlwiLFxuK1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuK1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuK1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOSxcbitcdC5tYXhfbVdfcGVyX3BvcnQgPSA5MDAwMCxcbitcdC5uYW1lID0gXCJSVEw4MjM5XCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gcnRsODIzOWNfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX1JUTDgyMzlDLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDkwMDAwLFxuK1x0Lm5hbWUgPSBcIlJUTDgyMzlDXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSA0MDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfRVhULFxuK1x0LnB3X3NldF9sc2JfbVcgPSA0MDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gYmNtNTkxMTFfaW5mbyA9IHtcbitcdC5kZXZpY2VfaWQgPSBSVFBTRV9NQ1VfREVWSUNFX0lEX0JDTTU5MTExLFxuK1x0Lm1heF9tV19wZXJfcG9ydCA9IDMwMDAwLFxuK1x0Lm5hbWUgPSBcIkJDTTU5MTExXCIsXG4rXHQucHdfcmVhZF9sc2JfbVcgPSAyMDAsXG4rXHQucHdfc2V0X2NtZCA9IFJUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVQsXG4rXHQucHdfc2V0X2xzYl9tVyA9IDIwMCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyBiY201OTEyMV9pbmZvID0ge1xuK1x0LmRldmljZV9pZCA9IFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjEsXG4rXHQvKlxuK1x0ICogQkNNNTkxMjEgaXMgYSA2MFcgVHlwZS0zIHBhcnQsIGJ1dCBrbm93biBib2FyZHMgcnVuIGl0IGF0IDgwMi4zYXRcbitcdCAqIGFuZCB0aGUgR2VuMSBkaWFsZWN0IGhhcyBvbmx5IHRoZSA4LWJpdC8wLjJXIHNldCBjb21tYW5kIChcdTAwM2M9NTFXKTtcbitcdCAqIGNhcCBhdCB0aGUgMzBXIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBvZmZlcnMuXG4rXHQgKi9cbitcdC5tYXhfbVdfcGVyX3BvcnQgPSAzMDAwMCxcbitcdC5uYW1lID0gXCJCQ001OTEyMVwiLFxuK1x0LnB3X3JlYWRfbHNiX21XID0gMjAwLFxuK1x0LnB3X3NldF9jbWQgPSBSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlULFxuK1x0LnB3X3NldF9sc2JfbVcgPSAyMDAsXG4rfTtcbitcbisvKiBIZWxwZXJzIGFuZCBiYXNpYyBmdW5jdGlvbnMgKi9cbitcbitzdGF0aWMgc3RydWN0IHJ0cHNlX21jdV9jdHJsICp0b19ydHBzZV9tY3VfY3RybChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldilcbit7XG4rXHRyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwsIHBjZGV2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRwc2VfbWN1X21zZ19pbml0KHN0cnVjdCBydHBzZV9tY3VfbXNnICptc2csIHU4IG9wY29kZSlcbit7XG4rXHRtZW1zZXQobXNnLCAweGZmLCBzaXplb2YoKm1zZykpO1xuK1x0bXNnLVx1MDAzZW9wY29kZSA9IG9wY29kZTtcbit9XG4rXG4rc3RhdGljIHU4IHJ0cHNlX21jdV9jaGVja3N1bShjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdHU4IHN1bSA9IDA7XG4rXG4rXHR3aGlsZSAobGVuLS0pXG4rXHRcdHN1bSArPSAqYnVmKys7XG4rXHRyZXR1cm4gc3VtO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kb194ZmVyKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0aW50IHJldDtcbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHNlLVx1MDAzZW11dGV4KSB7XG4rXHRcdC8qIFJvbGxpbmcgc2VxX251bSBzbyBhIGxhdGUgcmVwbHkgY2FuJ3QgcGFzcyBhcyBhIGxhdGVyIG9uZS4gKi9cbitcdFx0cmVxLVx1MDAzZXNlcV9udW0gPSBwc2UtXHUwMDNlc2VxKys7XG4rXHRcdHJlcS1cdTAwM2VjaGVja3N1bSA9IHJ0cHNlX21jdV9jaGVja3N1bSgodTggKilyZXEsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEpO1xuK1xuK1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXNlbmQocHNlLCByZXEpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBNQ1UgbmVlZHMgYSBmaXhlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHJlY2VpdmluZyBhIHJlcXVlc3RcbitcdFx0ICogYW5kIGhhdmluZyB0aGUgcmVzcG9uc2UgcmVhZHksIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlcyBnZXQgdG9cbitcdFx0ICogdXMuIFBhY2UgdGhlIHRyYW5zYWN0aW9uIGhlcmUgc28gZWFjaCB0cmFuc3BvcnQgY2FuIGtlZXAgaXRzIHJlY3ZcbitcdFx0ICogcGF0aCBzaW1wbGU6IGEgc2luZ2xlIGJvdW5kZWQgd2FpdCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRtc2xlZXAoUlRQU0VfTUNVX1JFU1BPTlNFX01TKTtcbitcbitcdFx0bWVtc2V0KHJlc3AsIDAsIHNpemVvZigqcmVzcCkpO1xuK1x0XHRyZXQgPSBwc2UtXHUwMDNldHJhbnNwb3J0LVx1MDAzZXJlY3YocHNlLCByZXEsIHJlc3ApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRXhwbGljaXQgTUNVIGVycm9yIG9wY29kZXMgKG9ic2VydmVkIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IGhhcm1sZXNzXG4rXHQgKiB0byBjaGVjayBmb3IgR2VuMiB0b28pLiBDYXRjaCB0aGVzZSBiZWZvcmUgdGhlIGdlbmVyaWMgb3Bjb2RlL0NSQ1xuK1x0ICogbWlzbWF0Y2ggcGF0aCBzbyBjYWxsZXJzIHNlZSBhIG1lYW5pbmdmdWwgZXJybm8uXG4rXHQgKi9cbitcdHN3aXRjaCAocmVzcC1cdTAwM2VvcGNvZGUpIHtcbitcdGNhc2UgUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFOlxuK1x0XHRyZXR1cm4gLUVCQURFO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfT1BDT0RFX0JBRF9DU1VNOlxuK1x0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRjYXNlIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZOlxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcbitcdGlmIChyZXNwLVx1MDAzZW9wY29kZSAhPSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4rXHQgICAgcmVzcC1cdTAwM2VzZXFfbnVtICE9IHJlcS1cdTAwM2VzZXFfbnVtIHx8XG4rXHQgICAgcmVzcC1cdTAwM2VjaGVja3N1bSAhPSBydHBzZV9tY3VfY2hlY2tzdW0oKHU4ICopcmVzcCwgUlRQU0VfTUNVX01TR19TSVpFIC0gMSkpXG4rXHRcdHJldHVybiAtRUJBRE1TRztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCwgdTggb3Bjb2RlLFxuK1x0XHRcdFx0c3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxO1xuK1x0aW50IHJldDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wY29kZSk7XG4rXHRyZXEucGF5bG9hZFswXSA9IHBvcnQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgcmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJlc3AtXHUwMDNlcGF5bG9hZFswXSAhPSBwb3J0KVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2NtZChzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIHU4IG9wY29kZSwgdTggYXJnKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlcSwgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRydHBzZV9tY3VfbXNnX2luaXQoXHUwMDI2cmVxLCBvcGNvZGUpO1xuK1x0cmVxLnBheWxvYWRbMF0gPSBwb3J0O1xuK1x0cmVxLnBheWxvYWRbMV0gPSBhcmc7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJlc3AucGF5bG9hZFswXSAhPSBwb3J0IHx8IHJlc3AucGF5bG9hZFsxXSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBHbG9iYWwgb3BlcmF0aW9ucyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2dldF9pbmZvKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfU1lTVEVNX0lORk9dO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXQgPSBydHBzZV9tY3VfZG9feGZlcihwc2UsIFx1MDAyNnJlcSwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8ocmVzcC5wYXlsb2FkLCBpbmZvKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9nZXRfZXh0X2NvbmZpZyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9leHRfY29uZmlnICpjb25maWcpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVxLCByZXNwO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9HRVRfRVhUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cnRwc2VfbWN1X21zZ19pbml0KFx1MDAyNnJlcSwgb3BjLVx1MDAzZW9wKTtcbitcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRjb25maWctXHUwMDNldXZsbyA9IHJlc3AucGF5bG9hZFswXTtcbitcdGNvbmZpZy1cdTAwM2VvdmxvID0gcmVzcC5wYXlsb2FkWzVdO1xuK1x0Y29uZmlnLVx1MDAzZXByZWFsbG9jX2VuYWJsZSA9IChyZXNwLnBheWxvYWRbMV0gPT0gMHgxKTtcbitcdGNvbmZpZy1cdTAwM2VudW1fb2ZfcHNlcyA9IHJlc3AucGF5bG9hZFs2XTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9zZXRfZ2xvYmFsX3N0YXRlKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXEsIHJlc3A7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJ0cHNlX21jdV9tc2dfaW5pdChcdTAwMjZyZXEsIG9wYy1cdTAwM2VvcCk7XG4rXHRyZXEucGF5bG9hZFswXSA9IGVuYWJsZSA/IDB4MSA6IDB4MDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9kb194ZmVyKHBzZSwgXHUwMDI2cmVxLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gKHJlc3AucGF5bG9hZFswXSA9PSAweDApID8gMCA6IC1FSU87XG4rfVxuK1xuKy8qIFBvcnQgb3BlcmF0aW9ucyAqL1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3N0YXR1cyhzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdGF0dXMtXHUwMDNlc3RzMSA9IHJlc3AucGF5bG9hZFsxXTtcbitcdHN0YXR1cy1cdTAwM2VzdHMyID0gcmVzcC5wYXlsb2FkWzJdO1xuK1x0c3RhdHVzLVx1MDAzZXN0czMgPSByZXNwLnBheWxvYWRbM107XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCAqbWVhc3VyZW1lbnQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKm9wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfbXNnIHJlc3A7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9HRVRfUE9XRVJfU1RBVFNdO1xuK1x0aWYgKCFvcGMtXHUwMDNldmFsaWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X3F1ZXJ5KHBzZSwgcG9ydCwgb3BjLVx1MDAzZW9wLCBcdTAwMjZyZXNwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRtZWFzdXJlbWVudC1cdTAwM2V2b2x0YWdlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbMV0pO1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNlY3VycmVudF9yYXcgPSBnZXRfdW5hbGlnbmVkX2JlMTYoXHUwMDI2cmVzcC5wYXlsb2FkWzNdKTtcbitcdG1lYXN1cmVtZW50LVx1MDAzZXRlbXBlcmF0dXJlX3JhdyA9IGdldF91bmFsaWduZWRfYmUxNihcdTAwMjZyZXNwLnBheWxvYWRbNV0pO1xuK1x0bWVhc3VyZW1lbnQtXHUwMDNlcG93ZXJfcmF3ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnJlc3AucGF5bG9hZFs3XSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfY29uZmlnKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCB1bnNpZ25lZCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X21zZyByZXNwO1xuK1x0aW50IHJldDtcbitcbitcdG9wYyA9IFx1MDAyNnBzZS1cdTAwM2VkaWFsZWN0LVx1MDAzZW9wY29kZVtSVFBTRV9NQ1VfQ01EX1BPUlRfR0VUX0NPTkZJR107XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfcXVlcnkocHNlLCBwb3J0LCBvcGMtXHUwMDNlb3AsIFx1MDAyNnJlc3ApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGNvbmZpZy1cdTAwM2VlbmFibGUgPSAocmVzcC5wYXlsb2FkWzFdID09IDEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2V4dF9jb25maWcoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIHVuc2lnbmVkIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgc3RydWN0IHJ0cHNlX21jdV9wb3J0X2V4dF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9tc2cgcmVzcDtcbitcdGludCByZXQ7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXTtcbitcdGlmICghb3BjLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9xdWVyeShwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgXHUwMDI2cmVzcCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Y29uZmlnLVx1MDAzZW1heF9wb3dlciA9IHJlc3AucGF5bG9hZFszXTtcbitcdGNvbmZpZy1cdTAwM2Vwcmlvcml0eSA9IHJlc3AucGF5bG9hZFs0XTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X3NldF9zdGF0ZShzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3Vfb3Bjb2RlICpvcGM7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV07XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIHBvcnQsIG9wYy1cdTAwM2VvcCwgZW5hYmxlID8gMHgxIDogMHgwKTtcbit9XG4rXG4rLyogUFNFIGNvbnRyb2xsZXIgb3BzICovXG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9jb25maWcgY29uZmlnO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9jb25maWcocHNlLCBpZCwgXHUwMDI2Y29uZmlnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRhZG1pbl9zdGF0ZS1cdTAwM2VjMzNfYWRtaW5fc3RhdGUgPSBjb25maWcuZW5hYmxlID8gRVRIVE9PTF9DMzNfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQgOlxuK1x0XHRcdFx0XHRcdCAgICAgICBFVEhUT09MX0MzM19QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4rXHRcdFx0XHRcdHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoIChzdGF0dXMuc3RzMSkge1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRElTQUJMRUQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1JFUVVFU1RJTkc6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1NFQVJDSElORztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ERUxJVkVSSU5HOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19ERUxJVkVSSU5HO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1RFU1Q6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1RFU1Q7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVFBTRV9NQ1VfUE9SVF9TVFNfRkFVTFQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX0ZBVUxUO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX09USEVSX0ZBVUxUOlxuK1x0XHRwd19zdGF0dXMtXHUwMDNlYzMzX3B3X3N0YXR1cyA9IEVUSFRPT0xfQzMzX1BTRV9QV19EX1NUQVRVU19PVEhFUkZBVUxUO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHB3X3N0YXR1cy1cdTAwM2VjMzNfcHdfc3RhdHVzID0gRVRIVE9PTF9DMzNfUFNFX1BXX0RfU1RBVFVTX1VOS05PV047XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3BvcnRfc3RhdHVzIHN0YXR1cztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfc3RhdHVzKHBzZSwgaWQsIFx1MDAyNnN0YXR1cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LypcbitcdCAqIHN0czIgaG9sZHMgdGhlIGNsYXNzIG9ubHkgaW4gdGhlIG9wZXJhdGlvbmFsIHN0YXRlcyBiZWxvdy4gSW4gYVxuK1x0ICogZmF1bHQvdGVzdCBzdGF0ZSAob3IgYSBjb2RlIHJlc2VydmVkIG9uIHRoZSBjdXJyZW50IGRpYWxlY3QpIGl0XG4rXHQgKiBkb2VzIG5vdCwgc28gdGhlcmUgaXMgbm8gY2xhc3MgdG8gcmVwb3J0IGFuZCB3ZSByZXR1cm4gMC4gVGhhdCBpc1xuK1x0ICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHJlYWwgY2xhc3MtMCBQRDsgdXNlcnNwYWNlIGRpc2FtYmlndWF0ZXNcbitcdCAqIHZpYSB0aGUgcG93ZXIgc3RhdHVzLlxuK1x0ICovXG4rXHRzd2l0Y2ggKHN0YXR1cy5zdHMxKSB7XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19ESVNBQkxFRDpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX1NFQVJDSElORzpcbitcdGNhc2UgUlRQU0VfTUNVX1BPUlRfU1RTX0RFTElWRVJJTkc6XG4rXHRjYXNlIFJUUFNFX01DVV9QT1JUX1NUU19SRVFVRVNUSU5HOlxuK1x0XHRyZXR1cm4gcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyhcdTAwMjZzdGF0dXMpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wdyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9wb3J0X21lYXN1cmVtZW50IG1lYXN1cmVtZW50O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJ0cHNlX21jdV9wb3J0X2dldF9tZWFzdXJlbWVudChwc2UsIGlkLCBcdTAwMjZtZWFzdXJlbWVudCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogMTAwbVcgcGVyIExTQiAqL1xuK1x0cmV0dXJuIG1lYXN1cmVtZW50LnBvd2VyX3JhdyAqIDEwMFU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9tZWFzdXJlbWVudCBtZWFzdXJlbWVudDtcbitcdGludCByZXQ7XG4rXHR1MzIgdVY7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfbWVhc3VyZW1lbnQocHNlLCBpZCwgXHUwMDI2bWVhc3VyZW1lbnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDY0LjQ1bVYgcGVyIExTQiAqL1xuK1x0dVYgPSBtZWFzdXJlbWVudC52b2x0YWdlX3JhdyAqIDY0NDUwVTtcbitcdHJldHVybiBtaW5fdCh1MzIsIHVWLCBJTlRfTUFYKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIHRydWUpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9wb3J0X2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRyZXR1cm4gcnRwc2VfbWN1X3BvcnRfc2V0X3N0YXRlKHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KSwgaWQsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBjb25maWcubWF4X3Bvd2VyICogcHNlLVx1MDAzZWNoaXAtXHUwMDNlcHdfcmVhZF9sc2JfbVc7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsIGludCBtYXhfbVcpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9vcGNvZGUgKnR5cGVfb3BjLCAqdmFsX29wYztcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9jaGlwX2luZm8gKmNoaXAgPSBwc2UtXHUwMDNlY2hpcDtcbitcdHU4IHByZ192YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKG1heF9tVyBcdTAwM2MgMCB8fCBtYXhfbVcgXHUwMDNlIGNoaXAtXHUwMDNlbWF4X21XX3Blcl9wb3J0KVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdHR5cGVfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW1JUUFNFX01DVV9DTURfUE9SVF9TRVRfUE9XRVJfTElNSVRfVFlQRV07XG4rXHR2YWxfb3BjID0gXHUwMDI2cHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlb3Bjb2RlW2NoaXAtXHUwMDNlcHdfc2V0X2NtZF07XG4rXHQvKiBwd19zZXRfbHNiX21XIGlzIHRoZSBkaXZpc29yIGJlbG93OyByZWplY3QgYSBjaGlwIHRoYXQgbGFja3MgaXQuICovXG4rXHRpZiAoIXR5cGVfb3BjLVx1MDAzZXZhbGlkIHx8ICF2YWxfb3BjLVx1MDAzZXZhbGlkIHx8ICFjaGlwLVx1MDAzZXB3X3NldF9sc2JfbVcpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBTd2l0Y2ggdGhlIHBvcnQgdG8gdXNlci1kZWZpbmVkIGxpbWl0IG1vZGUgZmlyc3QsIHRoZW4gcHJvZ3JhbSB0aGVcbitcdCAqIGxpbWl0IHZhbHVlLiBJZiB0aGUgc2Vjb25kIGNtZCBmYWlscywgdGhlIHBvcnQgaXMgbGVmdCBpblxuK1x0ICogdXNlci1kZWZpbmVkIG1vZGUgYnV0IHdpdGggdGhlIHByZXZpb3VzIGxpbWl0IHZhbHVlOyB0aGUgbmV4dFxuK1x0ICogc3VjY2Vzc2Z1bCBzZXRfcHdfbGltaXQgY2FsbCByZWNvdmVycyBpdC5cbitcdCAqL1xuK1x0cmV0ID0gcnRwc2VfbWN1X3BvcnRfY21kKHBzZSwgaWQsIHR5cGVfb3BjLVx1MDAzZW9wLCBSVFBTRV9NQ1VfUE9SVF9QV19MSU1JVF9UWVBFX1VTRVIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHByZ192YWwgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9tVyAvIGNoaXAtXHUwMDNlcHdfc2V0X2xzYl9tVywgVThfTUFYKTtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcG9ydF9jbWQocHNlLCBpZCwgdmFsX29wYy1cdTAwM2VvcCwgcHJnX3ZhbCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHNlX3B3X2xpbWl0X3JhbmdlcyAqb3V0KVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlID0gdG9fcnRwc2VfbWN1X2N0cmwocGNkZXYpO1xuK1x0c3RydWN0IGV0aHRvb2xfYzMzX3BzZV9wd19saW1pdF9yYW5nZSAqcmFuZ2U7XG4rXG4rXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJhbmdlWzBdLm1pbiA9IDA7XG4rXHRyYW5nZVswXS5tYXggPSBwc2UtXHUwMDNlY2hpcC1cdTAwM2VtYXhfbVdfcGVyX3BvcnQ7XG4rXG4rXHRvdXQtXHUwMDNlYzMzX3B3X2xpbWl0X3JhbmdlcyA9IHJhbmdlO1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IHRvX3J0cHNlX21jdV9jdHJsKHBjZGV2KTtcbitcdHN0cnVjdCBydHBzZV9tY3VfcG9ydF9leHRfY29uZmlnIGNvbmZpZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBydHBzZV9tY3VfcG9ydF9nZXRfZXh0X2NvbmZpZyhwc2UsIGlkLCBcdTAwMjZjb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBjb25maWcucHJpb3JpdHk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCwgdW5zaWduZWQgaW50IHByaW8pXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UgPSB0b19ydHBzZV9tY3VfY3RybChwY2Rldik7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X29wY29kZSAqb3BjO1xuK1xuK1x0aWYgKHByaW8gXHUwMDNlIFJUUFNFX01DVV9QT1JUX01BWF9QUklPUklUWSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRvcGMgPSBcdTAwMjZwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VvcGNvZGVbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV07XG4rXHRpZiAoIW9wYy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHJ0cHNlX21jdV9wb3J0X2NtZChwc2UsIGlkLCBvcGMtXHUwMDNlb3AsIHByaW8pO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBydHBzZV9tY3Vfb3BzID0ge1xuK1x0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZSxcbitcdC5waV9nZXRfcHdfc3RhdHVzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1cyxcbitcdC5waV9nZXRfcHdfY2xhc3MgPSBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3MsXG4rXHQucGlfZ2V0X2FjdHVhbF9wdyA9IHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHcsXG4rXHQucGlfZW5hYmxlID0gcnRwc2VfbWN1X3BvcnRfZW5hYmxlLFxuK1x0LnBpX2Rpc2FibGUgPSBydHBzZV9tY3VfcG9ydF9kaXNhYmxlLFxuK1x0LnBpX2dldF92b2x0YWdlID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2UsXG4rXHQucGlfZ2V0X3B3X2xpbWl0ID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0LFxuK1x0LnBpX3NldF9wd19saW1pdCA9IHJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdCxcbitcdC5waV9nZXRfcHdfbGltaXRfcmFuZ2VzID0gcnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3JhbmdlcyxcbitcdC5waV9nZXRfcHJpbyA9IHJ0cHNlX21jdV9wb3J0X2dldF9wcmlvLFxuK1x0LnBpX3NldF9wcmlvID0gcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW8sXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9kaXNjb3ZlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgc3RydWN0IHJ0cHNlX21jdV9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfZXh0X2NvbmZpZyBleHRfY29uZmlnO1xuK1x0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogQSBib290aW5nIE1DVSBtYXkgc3RheSBzaWxlbnQgKC1FVElNRURPVVQpLCBub3QgQUNLIGl0cyBhZGRyZXNzXG4rXHQgKiAoLUVOWElPIC8gLUVSRU1PVEVJTyksIHJlcG9ydCBub3QtcmVhZHkgKC1FQUdBSU4pLCBvciBlbWl0IGFcbitcdCAqIGNvcnJ1cHQvcGFydGlhbCBmcmFtZSAoLUVCQURNU0cgLyAtRUJBREUpLiBSZXRyeSB0aG9zZSB3aXRoaW4gYVxuK1x0ICogYm91bmRlZCB3aW5kb3c7IG90aGVyIGVycm9ycyAoZS5nLiAtRU9QTk9UU1VQUCkgYXJlIGZhdGFsIGFuZCBmYWlsXG4rXHQgKiBpbW1lZGlhdGVseS5cbitcdCAqL1xuK1x0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFBTRV9NQ1VfQk9PVF9USU1FT1VUX01TKTtcbitcdGRvIHtcbitcdFx0cmV0ID0gcnRwc2VfbWN1X2dldF9pbmZvKHBzZSwgaW5mbyk7XG4rXHRcdGlmIChyZXQgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTlhJTyBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FUkVNT1RFSU8gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQkFETVNHIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVCQURFKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRtc2xlZXAoUlRQU0VfTUNVX0JPT1RfUkVUUllfTVMpO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCwgXCJmYWlsZWQgdG8gcmVhZCBNQ1UgaW5mb1xcblwiKTtcbitcbitcdHN3aXRjaCAoaW5mby1cdTAwM2VkZXZpY2VfaWQpIHtcbitcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM4QjpcbitcdFx0cHNlLVx1MDAzZWNoaXAgPSBcdTAwMjZydGw4MjM4Yl9pbmZvO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRQU0VfTUNVX0RFVklDRV9JRF9SVEw4MjM5OlxuK1x0XHRwc2UtXHUwMDNlY2hpcCA9IFx1MDAyNnJ0bDgyMzlfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfUlRMODIzOUM6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2cnRsODIzOWNfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMTE6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMTFfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUUFNFX01DVV9ERVZJQ0VfSURfQkNNNTkxMjE6XG4rXHRcdHBzZS1cdTAwM2VjaGlwID0gXHUwMDI2YmNtNTkxMjFfaW5mbztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRUlOVkFMLCBcInVua25vd24gUFNFIGlkIDB4JXhcXG5cIixcbitcdFx0XHRcdCAgICAgaW5mby1cdTAwM2VkZXZpY2VfaWQpO1xuK1x0fVxuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZW1heF9wb3J0cyB8fCBpbmZvLVx1MDAzZW1heF9wb3J0cyBcdTAwM2UgUlRQU0VfTUNVX01BWF9QT1JUUylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHNlLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICAgXCJNQ1UgcmVwb3J0cyBpbnZhbGlkIHBvcnQgY291bnQgJXVcXG5cIiwgaW5mby1cdTAwM2VtYXhfcG9ydHMpO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2dldF9leHRfY29uZmlnKHBzZSwgXHUwMDI2ZXh0X2NvbmZpZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCByZXQsIFwiZmFpbGVkIHRvIHJlYWQgTUNVIGV4dCBjb25maWdcXG5cIik7XG4rXG4rXHRkZXZfaW5mbyhwc2UtXHUwMDNlZGV2LCBcIiVzIE1DVSwgJXMgKGlkIDB4JTA0eCksICV1IHBvcnRzIGFjcm9zcyAldSBQU0UgY2hpcChzKVxcblwiLFxuK1x0XHQgcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlbWN1X3R5cGVfc3RyKGluZm8tXHUwMDNlbWN1X3R5cGUpLCBwc2UtXHUwMDNlY2hpcC1cdTAwM2VuYW1lLFxuK1x0XHQgaW5mby1cdTAwM2VkZXZpY2VfaWQsIGluZm8tXHUwMDNlbWF4X3BvcnRzLCBleHRfY29uZmlnLm51bV9vZl9wc2VzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHBzZV9tY3VfZ2xvYmFsX2Rpc2FibGUodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSA9IGRhdGE7XG4rXG4rXHRydHBzZV9tY3Vfc2V0X2dsb2JhbF9zdGF0ZShwc2UsIGZhbHNlKTtcbit9XG4rXG4raW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgKm1hdGNoO1xuK1x0c3RydWN0IHJ0cHNlX21jdV9pbmZvIGluZm87XG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDtcbitcdGludCByZXQ7XG4rXG4rXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBydHBzZV9tY3VfbXNnKSAhPSBSVFBTRV9NQ1VfTVNHX1NJWkUpO1xuK1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KHBzZS1cdTAwM2VkZXYsIFx1MDAyNnBzZS1cdTAwM2VtdXRleCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEocHNlLVx1MDAzZWRldik7XG4rXHRpZiAoIW1hdGNoKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwc2UtXHUwMDNlZGV2LCAtRU5PREVWLCBcIm1pc3NpbmcgbWF0Y2ggZGF0YVxcblwiKTtcbitcdHBzZS1cdTAwM2VkaWFsZWN0ID0gbWF0Y2gtXHUwMDNlZGlhbGVjdDtcbitcbitcdC8qXG4rXHQgKiBDYXRjaCBhIGRpYWxlY3QgdGhhdCBmb3Jnb3QgdG8gc2V0IG9uZSBvZiB0aGUgcmVxdWlyZWQgaG9va3MgYXRcbitcdCAqIHByb2JlIHRpbWUsIHJhdGhlciB0aGFuIE5VTEwtZGVyZWYnaW5nIGxhdGVyIGZyb20gYSBmYXN0IHBhdGguXG4rXHQgKi9cbitcdGlmICghcHNlLVx1MDAzZWRpYWxlY3QgfHxcbitcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2Vfc3lzdGVtX2luZm8gfHxcbitcdCAgICAhcHNlLVx1MDAzZWRpYWxlY3QtXHUwMDNlcGFyc2VfcG9ydF9jbGFzcyB8fFxuK1x0ICAgICFwc2UtXHUwMDNlZGlhbGVjdC1cdTAwM2VtY3VfdHlwZV9zdHIpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgIFwiZGlhbGVjdCBmb3IgY2hpcCBpcyBpbmNvbXBsZXRlXFxuXCIpO1xuK1xuK1x0LypcbitcdCAqIFJlbGVhc2UgdGhlIE1DVSBmcm9tIHJlc2V0IGJlZm9yZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb247IHRoZVxuK1x0ICogYm9vdC1yZXRyeSBsb29wIGluIGRpc2NvdmVyKCkgd2FpdHMgZm9yIGl0IHRvIGFuc3dlci5cbitcdCAqL1xuK1x0Z3Bpb2QgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwc2UtXHUwMDNlZGV2LCBcInJlc2V0XCIsIEdQSU9EX09VVF9MT1cpO1xuK1x0aWYgKElTX0VSUihncGlvZCkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIoZ3Bpb2QpLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgcmVzZXQgZ3Bpb1xcblwiKTtcbitcbitcdC8qXG4rXHQgKiBTb21lIGJvYXJkcyBnYXRlIGFsbCBwb3J0cyB0aHJvdWdoIGEgaGFyZHdhcmUgbGluZTsgZGVhc3NlcnQgaXQgc29cbitcdCAqIHRoZSBNQ1UgcHJvdG9jb2wgZ292ZXJucyBwZXItcG9ydCBhZG1pbiBzdGF0ZSBmcm9tIGhlcmUgb24uXG4rXHQgKi9cbitcdGdwaW9kID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHNlLVx1MDAzZWRldiwgXCJkaXNhYmxlLXBvcnRzXCIsIEdQSU9EX09VVF9MT1cpO1xuK1x0aWYgKElTX0VSUihncGlvZCkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIFBUUl9FUlIoZ3Bpb2QpLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgZGlzYWJsZS1wb3J0cyBncGlvXFxuXCIpO1xuK1xuK1x0cmV0ID0gcnRwc2VfbWN1X2Rpc2NvdmVyKHBzZSwgXHUwMDI2aW5mbyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKCFpbmZvLnN5c3RlbV9lbmFibGUpIHtcbitcdFx0cmV0ID0gcnRwc2VfbWN1X3NldF9nbG9iYWxfc3RhdGUocHNlLCB0cnVlKTtcbitcdFx0LyogRGlhbGVjdHMgd2l0aG91dCBhIGdsb2JhbC1zdGF0ZSBjb25jZXB0IChlLmcuIEdlbjEpIHJldHVyblxuK1x0XHQgKiAtRU9QTk9UU1VQUDsgdHJlYXQgdGhhdCBhcyBcIm5vIHNlcGFyYXRlIGVuYWJsZSByZXF1aXJlZFwiLlxuK1x0XHQgKi9cbitcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHBzZS1cdTAwM2VkZXYsIHJldCxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBlbmFibGUgUFNFIHN5c3RlbVxcblwiKTtcbitcdFx0aWYgKCFyZXQpIHtcbitcdFx0XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQocHNlLVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHQgICAgICAgcnRwc2VfbWN1X2dsb2JhbF9kaXNhYmxlLCBwc2UpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRGVwZW5kaW5nIG9uIHRoZSBNQ1UgZmlybXdhcmUgY29uZmlndXJhdGlvbiAod2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50XG4rXHQgKiBmb3IgZXZlcnkgYm9hcmQpLCBpdCBpc24ndCBrbm93biB3aGV0aGVyIHRoZSBQb0Ugc3Vic3lzdGVtIGlzIGFjdGl2ZSBvclxuK1x0ICogaW5hY3RpdmUgYnkgZGVmYXVsdC4gQXQgdGhpcyBzdGFnZSwgdGhlIFBTRSBjaGlwcyBtaWdodCBhbHJlYWR5IGRlbGl2ZXJcbitcdCAqIHBvd2VyIHRvIFBEcyB3aXRob3V0IGFueSBleHBsaWNpdCBlbmFibGUuXG4rXHQgKi9cbitcbitcdC8qIHBjZGV2Lm93bmVyIGlzIHNldCBieSB0aGUgdHJhbnNwb3J0LCBzbyB0aGUgcmVnaXN0ZXJlZCBjb250cm9sbGVyXG4rXHQgKiBwaW5zIHRoZSB0cmFuc3BvcnQgbW9kdWxlIHRoYXQgb3ducyB0aGUgbGl2ZSBkZXZpY2UsIG5vdCB0aGUgY29yZS5cbitcdCAqL1xuK1x0cHNlLVx1MDAzZXBjZGV2Lm9wcyAgICAgID0gXHUwMDI2cnRwc2VfbWN1X29wcztcbitcdHBzZS1cdTAwM2VwY2Rldi5kZXYgICAgICA9IHBzZS1cdTAwM2VkZXY7XG4rXHRwc2UtXHUwMDNlcGNkZXYudHlwZXMgICAgPSBFVEhUT09MX1BTRV9DMzM7XG4rXHRwc2UtXHUwMDNlcGNkZXYubnJfbGluZXMgPSBpbmZvLm1heF9wb3J0cztcbitcdHBzZS1cdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSBSVFBTRV9NQ1VfUE9SVF9NQVhfUFJJT1JJVFk7XG4rXHRwc2UtXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUM7XG4rXG4rXHRyZXR1cm4gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcihwc2UtXHUwMDNlZGV2LCBcdTAwMjZwc2UtXHUwMDNlcGNkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfcmVnaXN0ZXIpO1xuK1xuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4re1xuK1x0aW5mby1cdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xuK1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gKHBheWxvYWRbMl0gPT0gMHgxKTtcbitcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuK1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuK1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4rXHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuK1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2VuMl9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHQvKiBDbGFzcyBsaXZlcyBpbiB0aGUgdXBwZXIgbmliYmxlIG9mIHN0czIuICovXG4rXHRyZXR1cm4gRklFTERfR0VUKEdFTk1BU0soNywgNCksIHN0YXR1cy1cdTAwM2VzdHMyKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXG4re1xuK1x0c3dpdGNoIChtY3VfdHlwZSkge1xuK1x0Y2FzZSAweDAwOlx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRjMxMFwiO1xuK1x0Y2FzZSAweDAxOlx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRjIzMFwiO1xuK1x0Y2FzZSAweDAyOlx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRjMwM1wiO1xuK1x0Y2FzZSAweDAzOlx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRjEwM1wiO1xuK1x0Y2FzZSAweDA0Olx0cmV0dXJuIFwiR2lnYURldmljZSBHRDMyRTEwM1wiO1xuK1x0Y2FzZSAweDEwOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDUxNlwiO1xuK1x0Y2FzZSAweDExOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDU2NFwiO1xuK1x0Y2FzZSAweDEyOlx0cmV0dXJuIFwiTnV2b3RvbiBOVUMwMjlcIjtcbitcdGRlZmF1bHQ6XHRyZXR1cm4gXCJ1bmtub3duXCI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0cHNlX21jdV9nZW4xX3BhcnNlX3N5c3RlbV9pbmZvKGNvbnN0IHU4ICpwYXlsb2FkLCBzdHJ1Y3QgcnRwc2VfbWN1X2luZm8gKmluZm8pXG4re1xuK1x0aW5mby1cdTAwM2VtYXhfcG9ydHMgPSBwYXlsb2FkWzFdO1xuK1x0LyogR2VuMSBoYXMgbm8gZXhwbGljaXQgc3lzdGVtX2VuYWJsZSBieXRlOyB0aGUgY2xvc2VzdCBhbmFsb2cgaXMgdGhlXG4rXHQgKiBcInJlbW90ZSBlbmFibGVcIiBiaXQgaW4gdGhlIHN5c3RlbS1zdGF0dXMgZmxhZ3MgYXQgcGF5bG9hZFs3XS5cbitcdCAqL1xuK1x0aW5mby1cdTAwM2VzeXN0ZW1fZW5hYmxlID0gISEocGF5bG9hZFs3XSBcdTAwMjYgQklUKDIpKTtcbitcdGluZm8tXHUwMDNlZGV2aWNlX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KFx1MDAyNnBheWxvYWRbM10pO1xuK1x0aW5mby1cdTAwM2Vzd192ZXIgPSBwYXlsb2FkWzVdO1xuK1x0aW5mby1cdTAwM2VtY3VfdHlwZSA9IHBheWxvYWRbNl07XG4rXHRpbmZvLVx1MDAzZWNvbmZpZ19zdGF0dXMgPSBwYXlsb2FkWzddO1xuK1x0aW5mby1cdTAwM2VleHRfdmVyID0gcGF5bG9hZFs4XTtcbit9XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfcG9ydF9zdGF0dXMgKnN0YXR1cylcbit7XG4rXHQvKiBHZW4xIHB1dHMgdGhlIGRldGVjdGVkIGNsYXNzIGluIHBheWxvYWRbM10gKD09IHN0czMpIGRpcmVjdGx5LlxuK1x0ICogTWFzayB0byB0aGUgbG93IG5pYmJsZTsgY2xhc3MgaXMgMC4uOCBhbmQgYW55IGhpZ2ggYml0cyB3b3VsZCBiZVxuK1x0ICogbm9pc2UuXG4rXHQgKi9cbitcdHJldHVybiBzdGF0dXMtXHUwMDNlc3RzMyBcdTAwMjYgMHgwZjtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnJ0cHNlX21jdV9nZW4xX21jdV90eXBlX3N0cih1bnNpZ25lZCBpbnQgbWN1X3R5cGUpXG4re1xuK1x0c3dpdGNoIChtY3VfdHlwZSkge1xuK1x0Y2FzZSAweDAwOlx0cmV0dXJuIFwiU1QgTWljcm8gU1QzMkYxMDBcIjtcbitcdGNhc2UgMHgwMTpcdHJldHVybiBcIk51dm90b24gTTA1eHggTEFOXCI7XG4rXHRjYXNlIDB4MDI6XHRyZXR1cm4gXCJTVCBNaWNybyBTVEYwMzBDOFwiO1xuK1x0Y2FzZSAweDAzOlx0cmV0dXJuIFwiTnV2b3RvbiBNMDU4U0FOXCI7XG4rXHRjYXNlIDB4MDQ6XHRyZXR1cm4gXCJOdXZvdG9uIE5VQzEyMlwiO1xuK1x0ZGVmYXVsdDpcdHJldHVybiBcInVua25vd25cIjtcbitcdH1cbit9XG4rXG4rLyogTWFwIGVhY2ggbG9naWNhbCBjb21tYW5kIHRoZSBjb3JlIGlzc3VlcyB0byBpdHMgcGVyLWRpYWxlY3Qgb3Bjb2RlLiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgcnRwc2VfbWN1X2RpYWxlY3RfZ2VuMiA9IHtcbitcdC5wYXJzZV9zeXN0ZW1faW5mbyA9IHJ0cHNlX21jdV9nZW4yX3BhcnNlX3N5c3RlbV9pbmZvLFxuK1x0LnBhcnNlX3BvcnRfY2xhc3MgID0gcnRwc2VfbWN1X2dlbjJfcGFyc2VfcG9ydF9jbGFzcyxcbitcdC5tY3VfdHlwZV9zdHIgICAgICA9IHJ0cHNlX21jdV9nZW4yX21jdV90eXBlX3N0cixcbitcdC5vcGNvZGUgPSB7XG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1NFVF9HTE9CQUxfU1RBVEVdXHQ9IFJUUFNFX01DVV9PUCgweDAwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDQwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4NGEpLFxuK1xuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMSksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTIpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cdD0gUlRQU0VfTUNVX09QKDB4MTMpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF9FWFRdID0gUlRQU0VfTUNVX09QKDB4MTQpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cdD0gUlRQU0VfTUNVX09QKDB4MTUpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4NDIpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cdD0gUlRQU0VfTUNVX09QKDB4NDQpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4NDgpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHg0OSksXG4rXHR9LFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfZGlhbGVjdCBydHBzZV9tY3VfZGlhbGVjdF9nZW4xID0ge1xuK1x0LnBhcnNlX3N5c3RlbV9pbmZvID0gcnRwc2VfbWN1X2dlbjFfcGFyc2Vfc3lzdGVtX2luZm8sXG4rXHQucGFyc2VfcG9ydF9jbGFzcyAgPSBydHBzZV9tY3VfZ2VuMV9wYXJzZV9wb3J0X2NsYXNzLFxuK1x0Lm1jdV90eXBlX3N0ciAgICAgID0gcnRwc2VfbWN1X2dlbjFfbWN1X3R5cGVfc3RyLFxuK1x0Lm9wY29kZSA9IHtcbitcdFx0W1JUUFNFX01DVV9DTURfR0VUX1NZU1RFTV9JTkZPXVx0XHQ9IFJUUFNFX01DVV9PUCgweDIwKSxcbitcdFx0W1JUUFNFX01DVV9DTURfR0VUX0VYVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MmIpLFxuK1xuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0VOQUJMRV1cdFx0PSBSVFBTRV9NQ1VfT1AoMHgwMCksXG4rXHRcdFtSVFBTRV9NQ1VfQ01EX1BPUlRfU0VUX1BPV0VSX0xJTUlUX1RZUEVdID0gUlRQU0VfTUNVX09QKDB4MTUpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QT1dFUl9MSU1JVF1cdD0gUlRQU0VfTUNVX09QKDB4MTYpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX1NFVF9QUklPUklUWV1cdD0gUlRQU0VfTUNVX09QKDB4MWEpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9TVEFUVVNdXHRcdD0gUlRQU0VfTUNVX09QKDB4MjEpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9QT1dFUl9TVEFUU11cdD0gUlRQU0VfTUNVX09QKDB4MzApLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9DT05GSUddXHRcdD0gUlRQU0VfTUNVX09QKDB4MjUpLFxuK1x0XHRbUlRQU0VfTUNVX0NNRF9QT1JUX0dFVF9FWFRfQ09ORklHXVx0PSBSVFBTRV9NQ1VfT1AoMHgyNiksXG4rXHR9LFxuK307XG4rXG4rY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4xX2RhdGEgPSB7XG4rXHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjEsXG4rfTtcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMV9kYXRhKTtcbitcbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YSA9IHtcbitcdC5kaWFsZWN0ID0gXHUwMDI2cnRwc2VfbWN1X2RpYWxlY3RfZ2VuMixcbit9O1xuK0VYUE9SVF9TWU1CT0xfR1BMKHJ0cHNlX21jdV9nZW4yX2RhdGEpO1xuK1xuKy8qIFNhbWUgZGlhbGVjdCBhcyBnZW4yLCBidXQgdGhlIE1DVSBleHBlY3RzIHJhdy1JMkMgZnJhbWluZy4gKi9cbitjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfaTJjX2RhdGEgPSB7XG4rXHQuZGlhbGVjdCA9IFx1MDAyNnJ0cHNlX21jdV9kaWFsZWN0X2dlbjIsXG4rXHQubmF0aXZlX2kyYyA9IHRydWUsXG4rfTtcbitFWFBPUlRfU1lNQk9MX0dQTChydHBzZV9tY3VfZ2VuMl9pMmNfZGF0YSk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoY29yZSlcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS1pMmMuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTEwZjhjNjMzYjY4ZWNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UtaTJjLmNcbkBAIC0wLDAgKzEsMTcwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwicmVhbHRlay1wc2UtbWN1LmhcIlxuK1xuKy8qXG4rICogVGhlIGNvcmUgaGFzIGFscmVhZHkgd2FpdGVkIFJUUFNFX01DVV9SRVNQT05TRV9NUyBiZWZvcmUgY2FsbGluZyB1cywgc29cbisgKiB0aGUgcmVzcG9uc2UgaXMgbm9ybWFsbHkgcmVhZHkgb24gdGhlIHZlcnkgZmlyc3QgcmVhZC4gRm9yIGNvbW1hbmRzIHRoZVxuKyAqIE1DVSBwcm9kdWNlcyBtb3JlIHNsb3dseSwga2VlcCBwb2xsaW5nIGF0IHRoZSB0eXBpY2FsIHJlc3BvbnNlIGNhZGVuY2VcbisgKiB1cCB0byB0aGUgd29yc3QtY2FzZSBjZWlsaW5nLlxuKyAqL1xuKyNkZWZpbmUgUlRQU0VfTUNVX0kyQ19SRVRSWV9NU1x0UlRQU0VfTUNVX1JFU1BPTlNFX01TXG4rI2RlZmluZSBSVFBTRV9NQ1VfSTJDX01BWF9UUklFU1x0KFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMgLyBSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19zbWJ1c19zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1xuK1x0LyogU2VuZCBvcGNvZGUgYXMgU01CdXMgY29tbWFuZCBieXRlOyByZW1haW5pbmcgMTEgYnl0ZXMgYXMgYmxvY2sgZGF0YSAqL1xuK1x0cmV0dXJuIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlcS1cdTAwM2VvcGNvZGUsIFJUUFNFX01DVV9NU0dfU0laRSAtIDEsXG4rXHRcdFx0XHRcdCAgICAgICh1OCAqKXJlcSArIDEpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVzcClcbit7XG4rXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChwc2UtXHUwMDNlZGV2KTtcbitcdGludCB0cmllcywgcmV0O1xuK1xuK1x0Zm9yICh0cmllcyA9IDA7IHRyaWVzIFx1MDAzYyBSVFBTRV9NQ1VfSTJDX01BWF9UUklFUzsgdHJpZXMrKykge1xuK1x0XHRpZiAodHJpZXMgXHUwMDNlIDApXG4rXHRcdFx0bXNsZWVwKFJUUFNFX01DVV9JMkNfUkVUUllfTVMpO1xuK1xuK1x0XHQvKiBNQ1UgbmVlZHMgMHgwMCBhcyBjb21tYW5kIGJ5dGUgZm9yIHJlYWQgKi9cbitcdFx0cmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCAweDAwLFxuK1x0XHRcdFx0XHRcdCAgICBSVFBTRV9NQ1VfTVNHX1NJWkUsXG4rXHRcdFx0XHRcdFx0ICAgICh1OCAqKXJlc3ApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChyZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFIFx1MDAyNlx1MDAyNiBydHBzZV9tY3VfcmVzcF9pc19maW5hbChyZXEsIHJlc3ApKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FVElNRURPVVQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19zbWJ1c19vcHMgPSB7XG4rXHQuc2VuZCA9IHJ0cHNlX21jdV9pMmNfc21idXNfc2VuZCxcbitcdC5yZWN2ID0gcnRwc2VfbWN1X2kyY19zbWJ1c19yZWN2LFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKVxuK3tcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KHBzZS1cdTAwM2VkZXYpO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IHJldDtcbitcbitcdC8qIGkyY19tYXN0ZXJfc2VuZCgpIG1heSBETUEsIHNvIHRoZSBidWZmZXIgbXVzdCBub3QgYmUgb24gdGhlIHN0YWNrLiAqL1xuK1x0YnVmID0ga21lbWR1cChyZXEsIFJUUFNFX01DVV9NU0dfU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJ1ZilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXHRrZnJlZShidWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldHVybiByZXQgPT0gUlRQU0VfTUNVX01TR19TSVpFID8gMCA6IC1FSU87XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSwgY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlcSxcbitcdFx0XHRcdCAgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApXG4re1xuK1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQocHNlLVx1MDAzZWRldik7XG4rXHRpbnQgdHJpZXMsIHJldDtcbitcdHU4ICpidWY7XG4rXG4rXHQvKiBpMmNfbWFzdGVyX3JlY3YoKSBtYXkgRE1BLCBzbyByZWFkIGludG8gYW4gb2ZmLXN0YWNrIGJ1ZmZlci4gKi9cbitcdGJ1ZiA9IGttYWxsb2MoUlRQU0VfTUNVX01TR19TSVpFLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAodHJpZXMgPSAwOyB0cmllcyBcdTAwM2MgUlRQU0VfTUNVX0kyQ19NQVhfVFJJRVM7IHRyaWVzKyspIHtcbitcdFx0aWYgKHRyaWVzIFx1MDAzZSAwKVxuK1x0XHRcdG1zbGVlcChSVFBTRV9NQ1VfSTJDX1JFVFJZX01TKTtcbitcbitcdFx0cmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmLCBSVFBTRV9NQ1VfTVNHX1NJWkUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHRpZiAocmV0ID09IFJUUFNFX01DVV9NU0dfU0laRSkge1xuK1x0XHRcdG1lbWNweShyZXNwLCBidWYsIFJUUFNFX01DVV9NU0dfU0laRSk7XG4rXHRcdFx0aWYgKHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKHJlcSwgcmVzcCkpIHtcbitcdFx0XHRcdHJldCA9IDA7XG4rXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcdHJldCA9IC1FVElNRURPVVQ7XG4rb3V0OlxuK1x0a2ZyZWUoYnVmKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X2kyY19uYXRpdmVfb3BzID0ge1xuK1x0LnNlbmQgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9zZW5kLFxuK1x0LnJlY3YgPSBydHBzZV9tY3VfaTJjX25hdGl2ZV9yZWN2LFxuK307XG4rXG4rc3RhdGljIGludCBydHBzZV9tY3VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2Y2xpZW50LVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSAqbWF0Y2g7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZTtcbitcdGJvb2wgdXNlX25hdGl2ZTtcbitcbitcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4rXHRpZiAoIW1hdGNoKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFwibWlzc2luZyBtYXRjaCBkYXRhXFxuXCIpO1xuK1xuK1x0LyogVGhlIGZyYW1pbmcgKHJhdyBJMkMgdnMgU01CdXMpIGlzIGNhcnJpZWQgYnkgdGhlIG1hdGNoIGRhdGEuICovXG4rXHR1c2VfbmF0aXZlID0gbWF0Y2gtXHUwMDNlbmF0aXZlX2kyYztcbitcdGlmICh1c2VfbmF0aXZlKSB7XG4rXHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU9QTk9UU1VQUCxcbitcdFx0XHRcdFwicGxhaW4tSTJDIE1DVSBwcm90b2NvbCByZXF1aXJlcyBJMkMtY2FwYWJsZSBhZGFwdGVyXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtXHUwMDNlYWRhcHRlcixcbitcdFx0XHRcdFx0ICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgfFxuK1x0XHRcdFx0XHQgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FT1BOT1RTVVBQLFxuK1x0XHRcdFx0XCJTTUJ1cyBNQ1UgcHJvdG9jb2wgcmVxdWlyZXMgU01CdXMgSTJDLWJsb2NrIHN1cHBvcnRcXG5cIik7XG4rXHR9XG4rXG4rXHRwc2UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwc2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cHNlLVx1MDAzZWRldiA9IGRldjtcbitcdHBzZS1cdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0cHNlLVx1MDAzZXRyYW5zcG9ydCA9IHVzZV9uYXRpdmUgPyBcdTAwMjZydHBzZV9tY3VfaTJjX25hdGl2ZV9vcHMgOiBcdTAwMjZydHBzZV9tY3VfaTJjX3NtYnVzX29wcztcbitcbitcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIocHNlKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcnRwc2VfbWN1X2kyY19vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxwc2UtbWN1LWdlbjEtc21idXNcIiwgLmRhdGEgPSBcdTAwMjZydHBzZV9tY3VfZ2VuMV9kYXRhIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMi1zbWJ1c1wiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4yX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1nZW4yLWkyY1wiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4yX2kyY19kYXRhIH0sXG4rXHR7IC8qIHNlbnRpbmVsICovIH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0cHNlX21jdV9pMmNfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBydHBzZV9tY3VfaTJjX2RyaXZlciA9IHtcbitcdC5kcml2ZXIgPSB7XG4rXHRcdC5uYW1lXHRcdD0gXCJyZWFsdGVrLXBzZS1tY3UtaTJjXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZVx0PSBydHBzZV9tY3VfaTJjX29mX21hdGNoLFxuK1x0fSxcbitcdC5wcm9iZVx0XHQ9IHJ0cHNlX21jdV9pMmNfcHJvYmUsXG4rfTtcbittb2R1bGVfaTJjX2RyaXZlcihydHBzZV9tY3VfaTJjX2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoSTJDIHRyYW5zcG9ydClcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcmVhbHRlay1wc2UtbWN1LXVhcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YmFhMTdkOGQzMWZhMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS11YXJ0LmNcbkBAIC0wLDAgKzEsMTY0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXJkZXYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwicmVhbHRlay1wc2UtbWN1LmhcIlxuK1xuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfQkFVRF9ERUZBVUxUXHQxOTIwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX1VBUlRfVFhfVElNRU9VVFx0bXNlY3NfdG9famlmZmllcygxMDApXG4rI2RlZmluZSBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUXHRtc2Vjc190b19qaWZmaWVzKFJUUFNFX01DVV9SRVNQT05TRV9NQVhfTVMpXG4rXG4rc3RydWN0IHJ0cHNlX21jdV91YXJ0IHtcbitcdHN0cnVjdCBydHBzZV9tY3VfY3RybCBwc2U7XG4rXHRzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2O1xuK1x0c3RydWN0IGNvbXBsZXRpb24gcnhfZG9uZTtcbitcdHNwaW5sb2NrX3QgcnhfbG9jaztcdFx0LyogcHJvdGVjdHMgcnhfYnVmIGFuZCByeF9sZW4gKi9cbitcdHNpemVfdCByeF9sZW47XG4rXHR1OCByeF9idWZbUlRQU0VfTUNVX01TR19TSVpFXTtcbit9O1xuK1xuKyNkZWZpbmUgdG9fcnRwc2VfbWN1X3VhcnQocCkgIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQsIHBzZSlcbitcbisvKlxuKyAqIE5vIGZyYW1pbmcgaXMgZG9uZSBoZXJlOiBhIGdsaXRjaGVkIGZyYW1lIGNvc3RzIG9uZSB0cmFuc2FjdGlvbiwgdGhlblxuKyAqIHRoZSBuZXh0IF9zZW5kIHJlLWZyYW1lcyBmcm9tIHJ4X2xlbiAwLiBSZXN5bmMgd29ya3MgYnkgcmV0dXJuaW5nIGNvdW50XG4rICogKG5vdCB0YWtlKSwgZHJvcHBpbmcgYW55IG92ZXJmbG93IHNvIHNlcmRldiBrZWVwcyBubyBsZWZ0b3ZlciB0byBibGVlZFxuKyAqIGludG8gdGhlIG5leHQgZnJhbWUuXG4rICovXG4rc3RhdGljIHNpemVfdCBydHBzZV9tY3VfdWFydF9yZWNlaXZlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgcnRwc2VfbWN1X3VhcnQgKmN0eCA9IHNlcmRldl9kZXZpY2VfZ2V0X2RydmRhdGEoc2VyZGV2KTtcbitcdHNpemVfdCB0YWtlO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4rXHRcdHRha2UgPSBtaW4oY291bnQsIHNpemVvZihjdHgtXHUwMDNlcnhfYnVmKSAtIGN0eC1cdTAwM2VyeF9sZW4pO1xuK1x0XHRpZiAodGFrZSkge1xuK1x0XHRcdG1lbWNweShjdHgtXHUwMDNlcnhfYnVmICsgY3R4LVx1MDAzZXJ4X2xlbiwgYnVmLCB0YWtlKTtcbitcdFx0XHRjdHgtXHUwMDNlcnhfbGVuICs9IHRha2U7XG4rXHRcdFx0aWYgKGN0eC1cdTAwM2VyeF9sZW4gPT0gc2l6ZW9mKGN0eC1cdTAwM2VyeF9idWYpKVxuK1x0XHRcdFx0Y29tcGxldGUoXHUwMDI2Y3R4LVx1MDAzZXJ4X2RvbmUpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBjb25zdW1lIGFsbCB0byBhdm9pZCBkZXN5bmMvbWlzYWxpZ25tZW50ICovXG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyZGV2X2RldmljZV9vcHMgcnRwc2VfbWN1X3VhcnRfc2VyZGV2X29wcyA9IHtcbitcdC5yZWNlaXZlX2J1ZiA9IHJ0cHNlX21jdV91YXJ0X3JlY2VpdmUsXG4rXHQud3JpdGVfd2FrZXVwID0gc2VyZGV2X2RldmljZV93cml0ZV93YWtldXAsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3NlbmQoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEpXG4re1xuK1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHggPSB0b19ydHBzZV9tY3VfdWFydChwc2UpO1xuK1x0aW50IHdyaXR0ZW47XG4rXG4rXHQvKiBjbGVhciBhbnkgbGVmdG92ZXIgcnggc3RhdGUgYmVmb3JlIHRyYW5zbWl0dGluZyAqL1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKSB7XG4rXHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbitcdFx0Y3R4LVx1MDAzZXJ4X2xlbiA9IDA7XG4rXHR9XG4rXG4rXHR3cml0dGVuID0gc2VyZGV2X2RldmljZV93cml0ZShjdHgtXHUwMDNlc2VyZGV2LCAoY29uc3QgdTggKilyZXEsIHNpemVvZigqcmVxKSxcbitcdFx0XHRcdCAgICAgIFJUUFNFX01DVV9VQVJUX1RYX1RJTUVPVVQpO1xuK1x0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4rXHRcdHJldHVybiB3cml0dGVuO1xuK1x0aWYgKHdyaXR0ZW4gIT0gc2l6ZW9mKCpyZXEpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0cHNlX21jdV91YXJ0X3JlY3Yoc3RydWN0IHJ0cHNlX21jdV9jdHJsICpwc2UsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHN0cnVjdCBydHBzZV9tY3VfdWFydCAqY3R4ID0gdG9fcnRwc2VfbWN1X3VhcnQocHNlKTtcbitcbitcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lLCBSVFBTRV9NQ1VfVUFSVF9SWF9USU1FT1VUKSlcbitcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4rXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Y3R4LVx1MDAzZXJ4X2xvY2spIHtcbitcdFx0aWYgKGN0eC1cdTAwM2VyeF9sZW4gIT0gc2l6ZW9mKCpyZXNwKSlcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcbitcdFx0bWVtY3B5KHJlc3AsIGN0eC1cdTAwM2VyeF9idWYsIHNpemVvZigqcmVzcCkpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X3RyYW5zcG9ydF9vcHMgcnRwc2VfbWN1X3VhcnRfdHJhbnNwb3J0X29wcyA9IHtcbitcdC5zZW5kID0gcnRwc2VfbWN1X3VhcnRfc2VuZCxcbitcdC5yZWN2ID0gcnRwc2VfbWN1X3VhcnRfcmVjdixcbit9O1xuK1xuK3N0YXRpYyBpbnQgcnRwc2VfbWN1X3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbit7XG4rXHR1MzIgc3BlZWQgPSBSVFBTRV9NQ1VfVUFSVF9CQVVEX0RFRkFVTFQ7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzZXJkZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJ0cHNlX21jdV91YXJ0ICpjdHg7XG4rXHR1bnNpZ25lZCBpbnQgYmF1ZDtcbitcdGludCByZXQ7XG4rXG4rXHRjdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjdHgpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y3R4LVx1MDAzZXNlcmRldiA9IHNlcmRldjtcbitcdGN0eC1cdTAwM2Vwc2UuZGV2ID0gZGV2O1xuK1x0Y3R4LVx1MDAzZXBzZS5wY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0Y3R4LVx1MDAzZXBzZS50cmFuc3BvcnQgPSBcdTAwMjZydHBzZV9tY3VfdWFydF90cmFuc3BvcnRfb3BzO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VyeF9kb25lKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmN0eC1cdTAwM2VyeF9sb2NrKTtcbitcbitcdHNlcmRldl9kZXZpY2Vfc2V0X2RydmRhdGEoc2VyZGV2LCBjdHgpO1xuK1x0c2VyZGV2X2RldmljZV9zZXRfY2xpZW50X29wcyhzZXJkZXYsIFx1MDAyNnJ0cHNlX21jdV91YXJ0X3NlcmRldl9vcHMpO1xuK1xuK1x0cmV0ID0gZGV2bV9zZXJkZXZfZGV2aWNlX29wZW4oZGV2LCBzZXJkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIG9wZW4gc2VyZGV2XFxuXCIpO1xuK1xuK1x0Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgXCJjdXJyZW50LXNwZWVkXCIsIFx1MDAyNnNwZWVkKTtcbitcbitcdGJhdWQgPSBzZXJkZXZfZGV2aWNlX3NldF9iYXVkcmF0ZShzZXJkZXYsIHNwZWVkKTtcbitcdGlmIChiYXVkICE9IHNwZWVkKVxuK1x0XHRkZXZfd2FybihkZXYsIFwiY291bGQgbm90IHNldCBiYXVkcmF0ZSAldSwgY29udHJvbGxlciB1c2VzICV1XFxuXCIsXG4rXHRcdFx0IHNwZWVkLCBiYXVkKTtcbitcbitcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChzZXJkZXYsIGZhbHNlKTtcbitcbitcdHJldCA9IHNlcmRldl9kZXZpY2Vfc2V0X3Bhcml0eShzZXJkZXYsIFNFUkRFVl9QQVJJVFlfTk9ORSk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfd2FybihkZXYsIFwiY291bGQgbm90IHNldCBwYXJpdHkgdG8gbm9uZTogJWRcXG5cIiwgcmV0KTtcbitcbitcdHJldHVybiBydHBzZV9tY3VfcmVnaXN0ZXIoXHUwMDI2Y3R4LVx1MDAzZXBzZSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0cHNlX21jdV91YXJ0X29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHBzZS1tY3UtZ2VuMVwiLCAuZGF0YSA9IFx1MDAyNnJ0cHNlX21jdV9nZW4xX2RhdGEgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInJlYWx0ZWsscHNlLW1jdS1nZW4yXCIsIC5kYXRhID0gXHUwMDI2cnRwc2VfbWN1X2dlbjJfZGF0YSB9LFxuK1x0eyAvKiBzZW50aW5lbCAqLyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydHBzZV9tY3VfdWFydF9vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBzZXJkZXZfZGV2aWNlX2RyaXZlciBydHBzZV9tY3VfdWFydF9kcml2ZXIgPSB7XG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicmVhbHRlay1wc2UtbWN1LXVhcnRcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0gcnRwc2VfbWN1X3VhcnRfb2ZfbWF0Y2gsXG4rXHR9LFxuK1x0LnByb2JlICA9IHJ0cHNlX21jdV91YXJ0X3Byb2JlLFxuK307XG4rbW9kdWxlX3NlcmRldl9kZXZpY2VfZHJpdmVyKHJ0cHNlX21jdV91YXJ0X2RyaXZlcik7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkpvbmFzIEplbG9uZWsgXHUwMDNjamVsb25lay5qb25hc0BnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUmVhbHRlayBQU0UgTUNVIGRyaXZlciAoVUFSVCB0cmFuc3BvcnQpXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaCBiL2RyaXZlcnMvbmV0L3BzZS1wZC9yZWFsdGVrLXBzZS1tY3UuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wYTMxOTdjOWM5Y2QxZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3JlYWx0ZWstcHNlLW1jdS5oXG5AQCAtMCwwICsxLDg5IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbitcbisjaWZuZGVmIF9SRUFMVEVLX1BTRV9NQ1VfSFxuKyNkZWZpbmUgX1JFQUxURUtfUFNFX01DVV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisvKlxuKyAqIFRpbWUgdGhlIE1DVSBpdHNlbGYgbmVlZHMgYmV0d2VlbiBhY2NlcHRpbmcgYSByZXF1ZXN0IGFuZCBoYXZpbmcgYVxuKyAqIHJlc3BvbnNlIHJlYWR5LiBUaGVzZSBhcmUgcHJvcGVydGllcyBvZiB0aGUgTUNVIGZpcm13YXJlLCBub3Qgb2YgdGhlXG4rICogdW5kZXJseWluZyB0cmFuc3BvcnQ6IHRoZSBjb3JlIHBhY2VzIHRyYW5zYWN0aW9ucyBieSBSVFBTRV9NQ1VfUkVTUE9OU0VfTVNcbisgKiBhbmQgYm90aCB0cmFuc3BvcnRzIHNpemUgdGhlaXIgcGVyLXRyYW5zYWN0aW9uIHJlY3YgY2VpbGluZyBmcm9tXG4rICogUlRQU0VfTUNVX1JFU1BPTlNFX01BWF9NUywgc2luY2Ugc29tZSBjb21tYW5kcyBhcmUgZG9jdW1lbnRlZCBhc1xuKyAqIG5lZWRpbmcgdXAgdG8gfjFzIHRvIHByb2R1Y2UgYSByZXBseS5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9SRVNQT05TRV9NU1x0XHRcdDI1XG4rI2RlZmluZSBSVFBTRV9NQ1VfUkVTUE9OU0VfTUFYX01TXHRcdDEwMDBcbitcbisvKlxuKyAqIFRvdGFsIHRpbWUgdG8ga2VlcCByZXRyeWluZyB0aGUgZmlyc3QgTUNVIHJlYWQgYXQgcHJvYmUsIGFuZCB0aGUgcGF1c2VcbisgKiBiZXR3ZWVuIGF0dGVtcHRzLiBSaWdodCBhZnRlciBlbmFibGUtZ3Bpb3MgaXMgYXNzZXJ0ZWQgdGhlIE1DVSBtYXkgbm90XG4rICogYW5zd2VyIG9uIHRoZSBidXMgeWV0OyBnaXZlIGl0IGEgYm91bmRlZCB3aW5kb3cgdG8gY29tZSB1cCBiZWZvcmVcbisgKiBkZWNsYXJpbmcgdGhlIHByb2JlIGZhaWxlZC5cbisgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9CT09UX1RJTUVPVVRfTVNcdFx0MzAwMFxuKyNkZWZpbmUgUlRQU0VfTUNVX0JPT1RfUkVUUllfTVNcdFx0XHQxMDBcbitcbisjZGVmaW5lIFJUUFNFX01DVV9NU0dfU0laRVx0XHRcdDEyXG4rXG4rc3RydWN0IHJ0cHNlX21jdV9tc2cge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggc2VxX251bTtcbitcdHU4IHBheWxvYWRbOV07XG4rXHR1OCBjaGVja3N1bTtcbit9IF9fcGFja2VkO1xuK1xuKy8qXG4rICogTUNVIHN0YXR1cyBvcGNvZGVzIChzZWVuIG9uIHRoZSBHZW4xIGRpYWxlY3Q7IEdlbjIgbmV2ZXIgZW1pdHMgdGhlbSkuXG4rICogSU5DT01QTEVURS9CQURfQ1NVTSBhcmUgdGVybWluYWw7IE5PVF9SRUFEWSBpcyB0cmFuc2llbnQuXG4rICovXG4rI2RlZmluZSBSVFBTRV9NQ1VfT1BDT0RFX0lOQ09NUExFVEVcdFx0MHhmZFx0LyogLUVCQURFICAgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfQkFEX0NTVU1cdFx0MHhmZVx0LyogLUVCQURNU0cgKi9cbisjZGVmaW5lIFJUUFNFX01DVV9PUENPREVfTk9UX1JFQURZXHRcdDB4ZmZcdC8qIC1FQUdBSU4gICovXG4rXG4rLyogQSBwb2xsaW5nIHRyYW5zcG9ydCBjYW4gc3RvcCBoZXJlOiB0aGUgbWF0Y2hpbmcgcmVwbHksIG9yIGEgdGVybWluYWwgZXJyb3IuICovXG4rc3RhdGljIGlubGluZSBib29sIHJ0cHNlX21jdV9yZXNwX2lzX2ZpbmFsKGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXEsXG4rXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbXNnICpyZXNwKVxuK3tcbitcdHJldHVybiByZXNwLVx1MDAzZW9wY29kZSA9PSByZXEtXHUwMDNlb3Bjb2RlIHx8XG4rXHQgICAgICAgcmVzcC1cdTAwM2VvcGNvZGUgPT0gUlRQU0VfTUNVX09QQ09ERV9JTkNPTVBMRVRFIHx8XG4rXHQgICAgICAgcmVzcC1cdTAwM2VvcGNvZGUgPT0gUlRQU0VfTUNVX09QQ09ERV9CQURfQ1NVTTtcbit9XG4rXG4rLyogT3BhcXVlIHRvIHRyYW5zcG9ydHM7IGRlZmluZWQgaW4gcmVhbHRlay1wc2UtY29yZS5jLiAqL1xuK3N0cnVjdCBydHBzZV9tY3VfZGlhbGVjdDtcbitzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbztcbitzdHJ1Y3QgcnRwc2VfbWN1X2N0cmw7XG4rXG4rLyogUGVyLWNvbXBhdGlibGUgbWF0Y2ggZGF0YSAodGhlIG9mX21hdGNoIC5kYXRhKS4gKi9cbitzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEge1xuK1x0Y29uc3Qgc3RydWN0IHJ0cHNlX21jdV9kaWFsZWN0ICpkaWFsZWN0O1xuK1x0Ym9vbCBuYXRpdmVfaTJjO1x0LyogcmF3LUkyQyBmcmFtaW5nICh2cyBTTUJ1cyk7IEkyQyB0cmFuc3BvcnQgb25seSAqL1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV90cmFuc3BvcnRfb3BzIHtcbitcdGludCAoKnNlbmQpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxKTtcbitcdGludCAoKnJlY3YpKHN0cnVjdCBydHBzZV9tY3VfY3RybCAqcHNlLCBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21zZyAqcmVxLFxuK1x0XHQgICAgc3RydWN0IHJ0cHNlX21jdV9tc2cgKnJlc3ApO1xuK307XG4rXG4rc3RydWN0IHJ0cHNlX21jdV9jdHJsIHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XG4rXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHNlcmlhbGl6ZXMgTUNVIHJlcXVlc3QvcmVzcG9uc2UgdHJhbnNhY3Rpb25zICovXG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2RpYWxlY3QgKmRpYWxlY3Q7XG4rXHRjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X2NoaXBfaW5mbyAqY2hpcDtcbitcdGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfdHJhbnNwb3J0X29wcyAqdHJhbnNwb3J0O1xuK1x0dTggc2VxO1x0XHRcdC8qIHJvbGxpbmcgcmVxdWVzdCBzZXFfbnVtLCBlY2hvZWQgYnkgdGhlIE1DVSAqL1xuK307XG4rXG4raW50IHJ0cHNlX21jdV9yZWdpc3RlcihzdHJ1Y3QgcnRwc2VfbWN1X2N0cmwgKnBzZSk7XG4rXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBydHBzZV9tY3VfbWF0Y2hfZGF0YSBydHBzZV9tY3VfZ2VuMV9kYXRhO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcnRwc2VfbWN1X21hdGNoX2RhdGEgcnRwc2VfbWN1X2dlbjJfZGF0YTtcbitleHRlcm4gY29uc3Qgc3RydWN0IHJ0cHNlX21jdV9tYXRjaF9kYXRhIHJ0cHNlX21jdV9nZW4yX2kyY19kYXRhO1xuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDE6MTU6MTguNTYwNTgyMTE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NDc2OTMzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgUmVhbHRlayBQU0UgTUNVIERyaXZlcioqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSwgaGFuZGxpbmcgYm90aCBJMkMgYW5kIFVBUlQgdHJhbnNwb3J0cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSByZWFjaCBpdCBpbiBRRU1VPyBXZSdyZSBkZWFsaW5nIHdpdGggSTJDIGFuZCBVQVJULCB3aGljaCBjYW4gYmUgZW11bGF0ZWQgb3IgaW5zdGFudGlhdGVkIGluIGEgZmV3IHdheXMuIEkyQywgZm9yIGluc3RhbmNlLCBoYXMgYGkyYy1zdHViYCwgYGkyYy1kZXZgLCBvciBkZXZpY2UgdHJlZSBub2RlcyBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9uLCBvciBzeXprYWxsZXIgaXRzZWxmIGNhbiBpbmplY3QgdHJhZmZpYyBvciBjcmVhdGUgdmlydHVhbCBkZXZpY2VzLiBTeXprYWxsZXIsIHJpZ2h0Li4uIGl0IG1pZ2h0IHVzZSBgL2Rldi9pMmMtWGAsIGJ1dCB0aGlzIGlzIGEgKnNwZWNpZmljKiBrZXJuZWwgZHJpdmVyLiBTbywgY2FuIHdlIHByb2JlIHRoaXMgZHJpdmVyP1xuXG5UaGUgYW5zd2VyIGlzIHllcy4gRGV2aWNlIHRyZWUgbm9kZXMgb3IgSTJDIHN5c2ZzIGBuZXdfZGV2aWNlYCBzaG91bGQgZG8gdGhlIHRyaWNrLiBVQVJULCBiZWluZyBzZXJkZXYsIGFsc28gcmVsaWVzIG9uIGRldmljZSB0cmVlLCB0aG91Z2ggYGxkYXR0YWNoYCBpcyB0ZW1wdGluZywgaXQgaXMgbm90IHRoZSB1c3VhbCBjYXNlLiBTeXprYWxsZXIgY2FuIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcyBvciBvdmVybGF5cywgYW5kIGl0IGhhcyBidWlsdC1pbiB3YXlzIHRvIHRlc3Qgc2VyZGV2IGFuZCBJMkMgZHJpdmVycyBpZiBpbnN0YW50aWF0ZWQuIFNvLCBjYW4gd2UgZnV6eiB0aGlzIHRoaW5nPyBBYnNvbHV0ZWx5LlxuXG5UaGUgZHJpdmVyIGltcGxlbWVudHMgYHBzZV9jb250cm9sbGVyX29wc2AsIHNvIGlmIGl0J3MgcHJvYmVkLCB3ZSdyZSB0YWxraW5nIGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyB0byByZWFjaCB0aG9zZSBmdW5jdGlvbnMuIENydWNpYWxseSwgSTJDIGRldmljZXMgY2FuIGJlIGluc3RhbnRpYXRlZCBieSB3cml0aW5nIHRvIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYC4gKlRoYXQncyogdGhlIGtleS4gSSBzZWUgYW4gYG9mX21hdGNoX3RhYmxlYCwgbm90IGFuIGBpZF90YWJsZWAuIERvZXMgYG5ld19kZXZpY2VgIHdvcmsgd2l0aCBhbiBgb2ZfbWF0Y2hfdGFibGVgPyBOb3JtYWxseSBpdCB3YW50cyBhbiBgaWRfdGFibGVgIG9yIGBkcml2ZXIubmFtZWAuIFdhaXQuLi4gSTJDIGNvcmUgZmFsbHMgYmFjayB0byBgb2ZfbWF0Y2hfdGFibGVgIGlmIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgY29tcGF0aWJsZSBzdHJpbmcgKndpdGhvdXQqIHRoZSB2ZW5kb3IgcHJlZml4LCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBTeXprYWxsZXIgY2FuIGxvYWQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgYW55d2F5LlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIG91ciBmdXp6aW5nIGVmZm9ydHM/IFdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVudHJ5IHBvaW50cy4gVGhlIGRyaXZlciBleHBvc2VzIHRoZXNlIGZ1bmN0aW9uczogYHJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZWAsIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYCwgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc2AsIGFuZCBzbyBvbi4gQWxsIHRoZXNlIGFyZSByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluayBpZiB0aGUgZGV2aWNlIGlzIHByb2JlZC4gQW5kIG9mIGNvdXJzZSwgdGhlIEkyQyBhbmQgVUFSVCByZWNlaXZlIHBhdGhzOiBgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZWAsIGBydHBzZV9tY3VfaTJjX3NtYnVzX3JlY3ZgLCBgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdmAuIEltcG9ydGFudGx5LCBgcnRwc2VfbWN1X3VhcnRfcmVjZWl2ZWAgaXMgY2FsbGVkIHdoZW4gZGF0YSBjb21lcyBpbiBvdmVyIFVBUlQuIEluc3RhbnRpYXRlIHRoZSBzZXJkZXYgZGV2aWNlIGFuZCB3ZSBjYW4gZmVlZCBpdCBkYXRhLCBlLmcuLCB2aWEgYSBwdHkuIEV4Y2VsbGVudC4gVGltZSB0byBmdXp6LlxuXG5UaGlzIGlzIGEgbmV3IGRyaXZlciwgaXQgcGFyc2VzIGRhdGEgZnJvbSB0aGUgZGV2aWNlLCBhbmQgZXhwb3NlcyBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSDigJMgcHJpbWUgZnV6emluZyBtYXRlcmlhbC5cblxuVG8gZW5hYmxlIHRoaXMsIHdlIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgLCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVWAsIGBDT05GSUdfUFNFX1JFQUxURUtfTUNVX0kyQ2AsIGFuZCBgQ09ORklHX1BTRV9SRUFMVEVLX01DVV9VQVJUYC4gTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBZZXAsIHRoYXQgbG9va3MgcmlnaHQ7IGBQU0VfQ09OVFJPTExFUmAgYW5kIGBTRVJJQUxfREVWX0JVU2AgbmVlZCB0byBiZSBlbmFibGVkIGFuZCBgSTJDYC5cblxuT2theSwgbGV0J3MgbGlzdCB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6XG5cbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X2FkbWluX3N0YXRlYFxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfc3RhdHVzYFxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfY2xhc3NgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9hY3R1YWxfcHdgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2VuYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZGlzYWJsZWBcbiogICBgcnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VgXG4qICAgYHJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdGBcbiogICBgcnRwc2VfbWN1X3BvcnRfc2V0X3B3X2xpbWl0YFxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRfcmFuZ2VzYFxuKiAgIGBydHBzZV9tY3VfcG9ydF9nZXRfcHJpb2BcbiogICBgcnRwc2VfbWN1X3BvcnRfc2V0X3ByaW9gXG4qICAgYHJ0cHNlX21jdV91YXJ0X3JlY2VpdmVgXG4qICAgYHJ0cHNlX21jdV9pMmNfc21idXNfcmVjdmBcbiogICBgcnRwc2VfbWN1X2kyY19uYXRpdmVfcmVjdmBcbiogICBgcnRwc2VfbWN1X2Rpc2NvdmVyXG5cbiIsIklucHV0VG9rZW5zIjoyNDAxNCwiT3V0cHV0VG9rZW5zIjozODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDE6MTU6NDkuMTA4Mjc4NTk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjA2NzMyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9DT05UUk9MTEVSXCIsXG4gICAgXCJQU0VfUkVBTFRFS19NQ1VfSTJDXCIsXG4gICAgXCJQU0VfUkVBTFRFS19NQ1VfVUFSVFwiLFxuICAgIFwiU0VSSUFMX0RFVl9CVVNcIixcbiAgICBcIkkyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0cHNlX21jdV9yZWdpc3RlclwiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV9pMmNfcHJvYmVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9hZG1pbl9zdGF0ZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X3N0YXR1c1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2NsYXNzXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWN0dWFsX3B3XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfdm9sdGFnZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZW5hYmxlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9kaXNhYmxlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X3NldF9wd19saW1pdFwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0X3Jhbmdlc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ByaW9cIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X3NldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfdWFydF9yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciB0aGUgUmVhbHRlayBQU0UgTUNVLCBzdXBwb3J0aW5nIGJvdGggSTJDIGFuZCBVQVJUIHRyYW5zcG9ydHMuIFRoZSBkcml2ZXIgZXhwb3NlcyBQU0UgY29udHJvbGxlciBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZSB2aWEgZXRodG9vbCBuZXRsaW5rIGFuZCBwYXJzZXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2Ugb3ZlciBJMkMvVUFSVC4gSXQgY2FuIGJlIHByb2JlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3IgSTJDIHN5c2ZzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX0kyQ1wiLFxuICAgIFwiUFNFX1JFQUxURUtfTUNVX1VBUlRcIixcbiAgICBcIlNFUklBTF9ERVZfQlVTXCIsXG4gICAgXCJJMkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydHBzZV9tY3VfcmVnaXN0ZXJcIixcbiAgICBcInJ0cHNlX21jdV91YXJ0X3Byb2JlXCIsXG4gICAgXCJydHBzZV9tY3VfaTJjX3Byb2JlXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9nZXRfYWRtaW5fc3RhdGVcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19zdGF0dXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19jbGFzc1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X2FjdHVhbF9wd1wiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3ZvbHRhZ2VcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2VuYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZGlzYWJsZVwiLFxuICAgIFwicnRwc2VfbWN1X3BvcnRfZ2V0X3B3X2xpbWl0XCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHdfbGltaXRcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wd19saW1pdF9yYW5nZXNcIixcbiAgICBcInJ0cHNlX21jdV9wb3J0X2dldF9wcmlvXCIsXG4gICAgXCJydHBzZV9tY3VfcG9ydF9zZXRfcHJpb1wiLFxuICAgIFwicnRwc2VfbWN1X3VhcnRfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUFNFIE1DVSwgc3VwcG9ydGluZyBib3RoIEkyQyBhbmQgVUFSVCB0cmFuc3BvcnRzLiBUaGUgZHJpdmVyIGV4cG9zZXMgUFNFIGNvbnRyb2xsZXIgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UgdmlhIGV0aHRvb2wgbmV0bGluayBhbmQgcGFyc2VzIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIG92ZXIgSTJDL1VBUlQuIEl0IGNhbiBiZSBwcm9iZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIEkyQyBzeXNmcywgbWFraW5nIGl0IHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow5rvsc[1] Phase: Succeeded StartedAt: 2026-07-27 01:16:15 +0000 UTC FinishedAt: 2026-07-27 01:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 01:16:15 +0000 UTC FinishedAt: 2026-07-27 01:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2] Phase: Succeeded StartedAt: 2026-07-27 01:16:15 +0000 UTC FinishedAt: 2026-07-27 03:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:16:15 +0000 UTC FinishedAt: 2026-07-27 03:47:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:16:15 +0000 UTC FinishedAt: 2026-07-27 01:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:16:15 +0000 UTC FinishedAt: 2026-07-27 01:17:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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-workflow5rvsc/series-workflow5rvsc-convert-artifact-503792366/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:17:10 +0000 UTC FinishedAt: 2026-07-27 01:57:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:17:10 +0000 UTC FinishedAt: 2026-07-27 01:57:43 +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:*a4ebcbc3-a501-4bc4-98c5-a12501f20f3f,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-workflow5rvsc/series-workflow5rvsc-convert-artifact-503792366/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": "5fb7a711-0333-42ef-aaed-5e44ee8f5568", "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-workflow5rvsc/series-workflow5rvsc-build-action-2655488596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:17:10 +0000 UTC FinishedAt: 2026-07-27 01:56:55 +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:*a4ebcbc3-a501-4bc4-98c5-a12501f20f3f,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-workflow5rvsc/series-workflow5rvsc-convert-artifact-503792366/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": "5fb7a711-0333-42ef-aaed-5e44ee8f5568", "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-workflow5rvsc/series-workflow5rvsc-build-action-2655488596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:57:43 +0000 UTC FinishedAt: 2026-07-27 01:57:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:57:43 +0000 UTC FinishedAt: 2026-07-27 01:57:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:57:43 +0000 UTC FinishedAt: 2026-07-27 01:57:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:57:43 +0000 UTC FinishedAt: 2026-07-27 01:57:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-workflow5rvsc/series-workflow5rvsc-convert-artifact-2607487713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:57:54 +0000 UTC FinishedAt: 2026-07-27 02:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 01:57:54 +0000 UTC FinishedAt: 2026-07-27 01:59:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5fb7a711-0333-42ef-aaed-5e44ee8f5568,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-workflow5rvsc/series-workflow5rvsc-build-action-2655488596/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-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:00:02 +0000 UTC FinishedAt: 2026-07-27 02:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:00:02 +0000 UTC FinishedAt: 2026-07-27 02:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:00:02 +0000 UTC FinishedAt: 2026-07-27 02:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:00:02 +0000 UTC FinishedAt: 2026-07-27 02:52:52 +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:*a4ebcbc3-a501-4bc4-98c5-a12501f20f3f,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-workflow5rvsc/series-workflow5rvsc-convert-artifact-2607487713/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": "787f32e1-1709-441b-86cd-aaeb8147d778", "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-workflow5rvsc/series-workflow5rvsc-build-action-3158481901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:00:02 +0000 UTC FinishedAt: 2026-07-27 02:52:42 +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:*a4ebcbc3-a501-4bc4-98c5-a12501f20f3f,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-workflow5rvsc/series-workflow5rvsc-convert-artifact-2607487713/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": "787f32e1-1709-441b-86cd-aaeb8147d778", "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-workflow5rvsc/series-workflow5rvsc-build-action-3158481901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:52:52 +0000 UTC FinishedAt: 2026-07-27 02:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:52:52 +0000 UTC FinishedAt: 2026-07-27 02:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:52:52 +0000 UTC FinishedAt: 2026-07-27 02:55:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:52:52 +0000 UTC FinishedAt: 2026-07-27 02:54:50 +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:*787f32e1-1709-441b-86cd-aaeb8147d778,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-workflow5rvsc/series-workflow5rvsc-build-action-3158481901/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-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:00 +0000 UTC FinishedAt: 2026-07-27 03:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:00 +0000 UTC FinishedAt: 2026-07-27 03:47:39 +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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"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:*5fb7a711-0333-42ef-aaed-5e44ee8f5568,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*787f32e1-1709-441b-86cd-aaeb8147d778,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-workflow5rvsc/series-workflow5rvsc-build-action-2655488596/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-workflow5rvsc/series-workflow5rvsc-build-action-3158481901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:00 +0000 UTC FinishedAt: 2026-07-27 02:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:00 +0000 UTC FinishedAt: 2026-07-27 02:55:04 +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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"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-workflow5rvsc/series-workflow5rvsc-convert-artifact-1223219574/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:00 +0000 UTC FinishedAt: 2026-07-27 02:55:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:00 +0000 UTC FinishedAt: 2026-07-27 02:55:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:00 +0000 UTC FinishedAt: 2026-07-27 02:55:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:10 +0000 UTC FinishedAt: 2026-07-27 03:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rvsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"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_register","rtpse_mcu_uart_probe","rtpse_mcu_i2c_probe","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_uart_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REALTEK_MCU_I2C","PSE_REALTEK_MCU_UART","SERIAL_DEV_BUS","I2C"],"series_id":"fc30f103-2a5e-46c8-99ab-b940ecc51ee2","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-27 02:55:10 +0000 UTC FinishedAt: 2026-07-27 03:47:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5fb7a711-0333-42ef-aaed-5e44ee8f5568,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*787f32e1-1709-441b-86cd-aaeb8147d778,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-workflow5rvsc/series-workflow5rvsc-build-action-2655488596/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-workflow5rvsc/series-workflow5rvsc-build-action-3158481901/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-workflow5rvsc/series-workflow5rvsc-convert-artifact-1223219574/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,}