Name: series-workflowk52t8 Phase: Failed StartedAt: 2026-06-25 05:56:26 +0000 UTC FinishedAt: 2026-06-25 06:09:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk52t8[0] Phase: Succeeded StartedAt: 2026-06-25 05:56:26 +0000 UTC FinishedAt: 2026-06-25 06:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk52t8[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 05:56:26 +0000 UTC FinishedAt: 2026-06-25 06:09:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW92ZXMgYW5kIGFkZHMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIGFzc2VydGlvbnMsIGFuZCBvcHRpbWl6ZXMgcGFnZV90b19uaWQvZm9saW9fbmlkIHRvIHJldHVybiAwIGRpcmVjdGx5IHdoZW4gIUNPTkZJR19OVU1BLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyB0aGF0IHJlcXVpcmVzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTI2MDVjMmY5YjQ3NWYzMTFhMTczNjUxMDEyNDUyZDk1N2VjMjNjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA2OjA3OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjU2YjM5MTk0NjA1YTc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yMjk0LDE1ICYjNDM7MjI5NCwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4gc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuJiM0MztcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cdTAwM2VmbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4mIzQzO1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0XHQgICAgICBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbiBcdHJldHVybiBtZW1kZXNjX25pZChmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIHBhZ2VfdG9fbmlkKHBhZ2UpICgwKVxuJiM0MzsjZGVmaW5lIGZvbGlvX25pZChmb2xpbykgKDApXG4mIzQzOyNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiAvKiBwYWdlIGFjY2VzcyB0aW1lIGJpdHMgbmVlZHMgdG8gaG9sZCBhdCBsZWFzdCA0IHNlY29uZHMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjU2ZGZmYTk2NjM0M2M0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTEyNzQsMTcgJiM0MzsxMjc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcbiB7XG4tXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gKGZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4mIzQzO1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHBhZ2UtXHUwMDNlZmxhZ3MsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBmb2xpb196b25lbnVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmb2xpby1cdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKGZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUyNjA1YzJmOWI0NzVmMzExYTE3MzY1MTAxMjQ1MmQ5NTdlYzIzY2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAwNjowNzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiMy4uNTZiMzkxOTQ2MDVhNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTIyOTQsMTUgJiM0MzsyMjk0LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiB9CiAjZW5kaWYKIAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQogc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiYjNDM7CUFTU0VSVF9FWENMVVNJVkVfQklUUyhQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS0mZ3Q7ZmxhZ3MsCiYjNDM7CQkJICAgICAgTk9ERVNfTUFTSyAmbHQ7Jmx0OyBOT0RFU19QR1NISUZUKTsKIAlyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiYjNDM7CUFTU0VSVF9FWENMVVNJVkVfQklUUyhmb2xpby0mZ3Q7ZmxhZ3MsCiYjNDM7CQkJICAgICAgTk9ERVNfTUFTSyAmbHQ7Jmx0OyBOT0RFU19QR1NISUZUKTsKIAlyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tJmd0O2ZsYWdzKTsKIH0KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgcGFnZV90b19uaWQocGFnZSkgKDApCiYjNDM7I2RlZmluZSBmb2xpb19uaWQoZm9saW8pICgwKQomIzQzOyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCiAvKiBwYWdlIGFjY2VzcyB0aW1lIGJpdHMgbmVlZHMgdG8gaG9sZCBhdCBsZWFzdCA0IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi41NmRmZmE5NjYzNDNjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0xMjc0LDE3ICYjNDM7MTI3NCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKIAogc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0obWVtZGVzY19mbGFnc190IGZsYWdzKQogewotCUFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy5mLCBaT05FU19NQVNLICZsdDsmbHQ7IFpPTkVTX1BHU0hJRlQpOwogCXJldHVybiAoZmxhZ3MuZiAmZ3Q7Jmd0OyBaT05FU19QR1NISUZUKSAmYW1wOyBaT05FU19NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKJiM0MzsJQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHBhZ2UtJmd0O2ZsYWdzLCBaT05FU19NQVNLICZsdDsmbHQ7IFpPTkVTX1BHU0hJRlQpOwogCXJldHVybiBtZW1kZXNjX3pvbmVudW0ocGFnZS0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKJiM0MzsJQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLSZndDtmbGFncywgWk9ORVNfTUFTSyAmbHQ7Jmx0OyBaT05FU19QR1NISUZUKTsKIAlyZXR1cm4gbWVtZGVzY196b25lbnVtKGZvbGlvLSZndDtmbGFncyk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpbmNsdWRlL2xpbnV4L21tLmhgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5PyYjMzQ7IEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIG1hY3JvIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB0byB2YWxpZGF0ZSBiaXQgZmllbGRzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBtb3ZpbmcgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGZyb20gYG1lbWRlc2Nfem9uZW51bWAgdG8gYHBhZ2Vfem9uZW51bWAgYW5kIGBmb2xpb196b25lbnVtYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBjYW4gc2VlIHdoYXQgdGhleSBhcmUgYWltaW5nIHRvIGRvIGhlcmUsIGNoZWNraW5nIHRoZSBmbGFncyBwYXNzZWQgaW50byB0aG9zZSBmdW5jdGlvbnMuCgpUaGVuIGl0IGFkZHMgdGhlIHNhbWUgYXNzZXJ0aW9uIHRvIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgLCBidXQgKm9ubHkqIHVuZGVyIGBDT05GSUdfTlVNQWAsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoYXQgdGhlIGV4aXN0aW5nIGJlaGF2aW9yIHVuZGVyIGAhQ09ORklHX05VTUFgIGNvdWxkIGJlIHNpZ25pZmljYW50LiBJdCB0aGVuIGRlZmluZXMgdGhlbSB0byBqdXN0IHJldHVybiBgKDApYCB3aGVuIGAhQ09ORklHX05VTUFgLiBTbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhZGRpbmcgdGhpcyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgYml0cyB1c2VkIGZvciB0aGUgbm9kZSBJRCBhcmUgZXhjbHVzaXZlbHkgc2V0LiBUaGlzIHNvdW5kcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IGFjY2lkZW50YWwgYml0IGNvbGxpc2lvbnMgb3IgbWlzaW50ZXJwcmV0YXRpb25zLgoKSSB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIHJlYWxpc2UgdGhhdCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGVzZSBsaW5lczoKCmBgYGMKJiM0MzsjaWZkZWYgQ09ORklHX05VTUEKIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktJmd0O2ZsYWdzLAomIzQzOwkJCSAgICAgIE5PREVTX01BU0sgJmx0OyZsdDsgTk9ERVNfUEdTSElGVCk7CiAJcmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tJmd0O2ZsYWdzLAomIzQzOwkJCSAgICAgIE5PREVTX01BU0sgJmx0OyZsdDsgTk9ERVNfUEdTSElGVCk7CiAJcmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLSZndDtmbGFncyk7CiB9CiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIHBhZ2VfdG9fbmlkKHBhZ2UpICgwKQomIzQzOyNkZWZpbmUgZm9saW9fbmlkKGZvbGlvKSAoMCkKJiM0MzsjZW5kaWYKYGBgCgpBbmQgdGhlc2UgbGluZXM6CgpgYGBjCiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpCiB7Ci0JQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgJmx0OyZsdDsgWk9ORVNfUEdTSElGVCk7CiAJcmV0dXJuIChmbGFncy5mICZndDsmZ3Q7IFpPTkVTX1BHU0hJRlQpICZhbXA7IFpPTkVTX01BU0s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMocGFnZS0mZ3Q7ZmxhZ3MsIFpPTkVTX01BU0sgJmx0OyZsdDsgWk9ORVNfUEdTSElGVCk7CiAJcmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tJmd0O2ZsYWdzLCBaT05FU19NQVNLICZsdDsmbHQ7IFpPTkVTX1BHU0hJRlQpOwogCXJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tJmd0O2ZsYWdzKTsKIH0KYGBgCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O1RoZXNlIGFyZSBwdXJlbHkgYXNzZXJ0aW9ucyYjMzQ7LCBvciBtYWNybyBkZWZpbml0aW9ucyBmb3IgYCFDT05GSUdfTlVNQWAuIElmIHNvIHRoZXkgd2VyZSBwcm9iYWJseSBhbHJlYWR5IHJldHVybmluZyAwIG9yIGRvaW5nIHNvbWV0aGluZyBzaW1pbGFyLCBvciBmaXhpbmcgYSBidWlsZCBpc3N1ZS4mIzM0OyBUaGVuIHRoZSAmIzM0O1dhaXQgYSBzZWNvbmQmIzM0OyBtb21lbnQgY29tZXMuIFdoYXQgKmRpZCogYHBhZ2VfdG9fbmlkYCBhY3R1YWxseSBkbyBiZWZvcmUgd2hlbiBgIUNPTkZJR19OVU1BYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBwcmUtcGF0Y2ggdmVyc2lvbiBvZiBgaW5jbHVkZS9saW51eC9tbS5oYCB0byBjb25maXJtIHRoZSBvcmlnaW5hbCBiZWhhdmlvdXIuIFRoZSBzYW1lIGdvZXMgZm9yIHRoZSBgbWVtZGVzY19uaWRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gVG8gY29uZmlybSB0aGUgYmVoYXZpb3VyIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoZSBjb2RlIGFyb3VuZCB0aGUgYG1lbWRlc2NfbmlkYCBmdW5jdGlvbi4gTG9va3MgbGlrZSBsaW5lIDIyOTQgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWRlc2NfbmlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD0yMjgzPXN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI4OC0jaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xuaW5jbHVkZS9saW51eC9tbS5oOjIyODk6aW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIyOTAtI2Vsc2VcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkxOnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5Mi17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTIyOTg9c3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDEtXHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwMjpcdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cdTAwM2VmbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMy19XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTIzMDU9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDgtXHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwOTpcdHJldHVybiBtZW1kZXNjX25pZChmb2xpby1cdTAwM2VmbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMjMxMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIExhbmRzY2FwZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIHNlZWluZyBhIGNoYW5nZSBpbiB0aGUgZGVmaW5pdGlvbnMuIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgIHdlcmUgYWx3YXlzIGF2YWlsYWJsZSwgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkuIE5vdywgdGhleSYjMzk7cmUgc3VkZGVubHkgd3JhcHBlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTlVNQWAgYmxvY2suIFRoYXQmIzM5O3MgYSByZWQgZmxhZyDigJMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgbWVtb3J5IG5vZGUgYXNzb2NpYXRpb24gaXMgaGFuZGxlZC4KClRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBxdWVzdGlvbjogaWYgYENPTkZJR19OVU1BYCBpcyAqbm90KiBkZWZpbmVkIChpLmUuLCBgIUNPTkZJR19OVU1BYCksIHdoYXQgd2FzIGBtZW1kZXNjX25pZGAgZG9pbmc/IEl0IHNlZW1zIGxpa2UgdGhpcyBtaWdodCBiZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgbWVtZGVzY19uaWRgIHByb3ZpZGVzLiBMZXQmIzM5O3MgZGVsdmUgaW50byBpdHMgZGVmaW5pdGlvbiBhbmQgdW5yYXZlbCBpdHMgcHVycG9zZSBpbiB0aGUgYWJzZW5jZSBvZiBOVU1BLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1kZXNjX25pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9MjI4Mz1zdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTIyODgtI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcbmluY2x1ZGUvbGludXgvbW0uaDoyMjg5OmludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcbmluY2x1ZGUvbGludXgvbW0uaC0yMjkwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5MTpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTIte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yMjk4PXN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMzAxLVx0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuaW5jbHVkZS9saW51eC9tbS5oOjIzMDI6XHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIzMDMtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yMzA1PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMzA4LVx0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuaW5jbHVkZS9saW51eC9tbS5oOjIzMDk6XHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXHUwMDNlZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIzMTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjI4OC4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgZGVhbGluZyB3aXRoIFtpbnNlcnQgeW91ciBhc3N1bXB0aW9uIG9mIHdoYXQgbGluZSAyMjg4IGRlYWxzIHdpdGgsIGUuZy4sICYjMzQ7dGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAgb3IgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zJiMzNDtdLiBJIGFudGljaXBhdGUgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBsb3ctbGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgY2VudHJhbCB0byB0aGUgb3BlcmF0aW9uIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSBleHBlY3QgaXQgdG8gaGF2ZSB0aGUgY3J1Y2lhbCBwaWVjZXMgSSYjMzk7bSBsb29raW5nIGZvciAtIHdoZXRoZXIgaXQgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFwcywgcGFnZSB0YWJsZXMgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGxvb2sgZm9yIGFueSBjbHVlcyByZWdhcmRpbmcgd2hhdCBJIGhhdmUgcHJldmlvdXNseSBiZWVuIGV4YW1pbmluZy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgcmlnaHQgZG93biB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODA6XHQgKiBXZSBvbmx5IGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGZvciB0d28gY29tYmluYWJsZVxuMjI4MTpcdCAqIHBhZ2VzIGluIGEgem9uZS5cbjIyODI6XHQgKi9cbjIyODM6XHRzdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4yMjg0Olx0e1xuMjI4NTpcdFx0cmV0dXJuIChwYWdlLVx1MDAzZWZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVJRF9QR1NISUZUKSBcdTAwMjYgWk9ORUlEX01BU0s7XG4yMjg2Olx0fVxuMjI4NzpcdFxuMjI4ODpcdCNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXG4yMjg5Olx0aW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuMjI5MDpcdCNlbHNlXG4yMjkxOlx0c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcbjIyOTI6XHR7XG4yMjkzOlx0XHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBOT0RFU19QR1NISUZUKSBcdTAwMjYgTk9ERVNfTUFTSztcbjIyOTQ6XHR9XG4yMjk1Olx0I2VuZGlmXG4yMjk2Olx0XG4yMjk3Olx0I2lmZGVmIENPTkZJR19OVU1BXG4yMjk4Olx0c3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4yMjk5Olx0e1xuMjMwMDpcdFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVx1MDAzZWZsYWdzLFxuMjMwMTpcdFx0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuMjMwMjpcdFx0cmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVx1MDAzZWZsYWdzKTtcbjIzMDM6XHR9XG4yMzA0Olx0XG4yMzA1Olx0c3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4yMzA2Olx0e1xuMjMwNzpcdFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVx1MDAzZWZsYWdzLFxuMjMwODpcdFx0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuMjMwOTpcdFx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbjIzMTA6XHR9XG4yMzExOlx0I2Vsc2VcbjIzMTI6XHQjZGVmaW5lIHBhZ2VfdG9fbmlkKHBhZ2UpICgwKVxuMjMxMzpcdCNkZWZpbmUgZm9saW9fbmlkKGZvbGlvKSAoMClcbjIzMTQ6XHQjZW5kaWZcbjIzMTU6XHRcbjIzMTY6XHQjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4yMzE3Olx0LyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXG4yMzE4Olx0I2RlZmluZSBQQUdFX0FDQ0VTU19USU1FX01JTl9CSVRTXHQxMlxuMjMxOTpcdCNpZiBMQVNUX0NQVVBJRF9TSElGVCBcdTAwM2MgUEFHRV9BQ0NFU1NfVElNRV9NSU5fQklUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIgYXQgZmlyc3QgZ2xhbmNlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGEgZGVlcGVyIGNoYW5nZSwgYWZmZWN0aW5nIGhvdyBtZW1vcnkgaXMgbWFuYWdlZC4gQnV0IGFmdGVyIGEgc2Vjb25kIGxvb2ssIGFuZCBjYXJlZnVsbHkgdHJhY2luZyB0aGUgbG9naWMsIEkgc2VlIGl0JiMzOTtzIHB1cmVseSBhYm91dCBhc3NlcnRpb25zIGFuZCBtYWNybyBkZWZpbml0aW9ucywgcmF0aGVyIHRoYW4gYW55IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHNoaWZ0aW5nIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGZyb20gYG1lbWRlc2Nfem9uZW51bWAgdG8gYHBhZ2Vfem9uZW51bWAgYW5kIGBmb2xpb196b25lbnVtYC4gTm8gcHJvYmxlbSB0aGVyZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGhhbmRsaW5nIG9mIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgIHVuZGVyIGBDT05GSUdfTlVNQWAgYW5kIHRoZSBpbXBsaWNhdGlvbiB3aGVuIGAhQ09ORklHX05VTUFgLiBJdCBpbnRyb2R1Y2VzIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIHRvIHRob3NlIGZ1bmN0aW9ucyB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZCwgc2V0dGluZyB0aGVtIHRvIGAoMClgIG90aGVyd2lzZS4KCk15IGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UsIGJ1dCBhcyBJIHJldmlld2VkIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9ucywgSSByZWFsaXplZCB0aGVyZSYjMzk7cyBubyBhbHRlcmF0aW9uIGluIGJlaGF2aW9yLiBQcmV2aW91c2x5LCBgcGFnZV90b19uaWRgIHVsdGltYXRlbHkgY2FsbGVkIGBtZW1kZXNjX25pZGAsIHdoaWNoIGluIHR1cm4sIHVzZWQgYml0IHNoaWZ0aW5nIGJhc2VkIG9uIGBOT0RFU19QR1NISUZUYCBhbmQgYE5PREVTX01BU0tgLiBOb3csIHdoZW4gYCFDT05GSUdfTlVNQWAsIHRoZSBgcGFnZV90b19uaWRgIGZ1bmN0aW9uIHJldHVybnMgKDApIGRpcmVjdGx5LiBDb25zaWRlcmluZyBgTk9ERVNfUEdTSElGVGAgYW5kIGBOT0RFU19NQVNLYCBhcmUgMCBpbiB0aGF0IHNjZW5hcmlvLCB0aGUgcmVzdWx0aW5nIHZhbHVlIHdvdWxkIGhhdmUgYmVlbiB6ZXJvIGFueXdheXMuIFRoaXMgaXMgYSBtYWNybyBvcHRpbWl6YXRpb24uCgpKdXN0IHRvIGJlIGNlcnRhaW4sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBoZWFkZXIgZmlsZSBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAgdG8gbWFrZSBzdXJlIGFsbCByZWxhdGVkIG1hY3JvcyBhcmUgYmVpbmcgaGFuZGxlZCBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjcwOlx0I2RlZmluZSBTRUNUSU9OU19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19XSURUSCkgLSAxKVxuMTI3MTpcdCNkZWZpbmUgTEFTVF9DUFVQSURfTUFTS1x0KCgxVUwgXHUwMDNjXHUwMDNjIExBU1RfQ1BVUElEX1NISUZUKSAtIDEpXG4xMjcyOlx0I2RlZmluZSBLQVNBTl9UQUdfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXG4xMjczOlx0I2RlZmluZSBaT05FSURfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXG4xMjc0Olx0XG4xMjc1Olx0c3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0obWVtZGVzY19mbGFnc190IGZsYWdzKVxuMTI3NjpcdHtcbjEyNzc6XHRcdHJldHVybiAoZmxhZ3MuZiBcdTAwM2VcdTAwM2UgWk9ORVNfUEdTSElGVCkgXHUwMDI2IFpPTkVTX01BU0s7XG4xMjc4Olx0fVxuMTI3OTpcdFxuMTI4MDpcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuMTI4MTpcdHtcbjEyODI6XHRcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhwYWdlLVx1MDAzZWZsYWdzLCBaT05FU19NQVNLIFx1MDAzY1x1MDAzYyBaT05FU19QR1NISUZUKTtcbjEyODM6XHRcdHJldHVybiBtZW1kZXNjX3pvbmVudW0ocGFnZS1cdTAwM2VmbGFncyk7XG4xMjg0Olx0fVxuMTI4NTpcdFxuMTI4NjpcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTI4NzpcdHtcbjEyODg6XHRcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmb2xpby1cdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4xMjg5Olx0XHRyZXR1cm4gbWVtZGVzY196b25lbnVtKGZvbGlvLVx1MDAzZWZsYWdzKTtcbjEyOTA6XHR9XG4xMjkxOlx0XG4xMjkyOlx0I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuMTI5MzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4xMjk0Olx0e1xuMTI5NTpcdFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFO1xuMTI5NjpcdH1cbjEyOTc6XHRcbjEyOTg6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbjEyOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTcKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGFsbCBpdCYjMzk7cyBkb2luZyBpcyBhZGRpbmcgb3IgcmVsb2NhdGluZyB0aGUgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgbWFjcm8gYW5kIHRoZW4gY2hhbmdpbmcgdGhlIGNhbGxzIHRvIGBwYWdlX3RvX25pZGAgb3IgYGZvbGlvX25pZGAgdG8ganVzdCByZXR1cm4gYCgwKWAgd2hlbiB0aGUgc3lzdGVtIGRvZXNuJiMzOTt0IGhhdmUgTlVNQSBlbmFibGVkIOKAkyB3aGljaCwgaW4gbXkgZXhwZXJpZW5jZSwgaXMgYSBmYWlybHkgY29tbW9uIGFuZCBleHBlY3RlZCBvcHRpbWl6YXRpb24gaW4gdGhhdCBzY2VuYXJpby4KCkhvbmVzdGx5LCB0aGlzIGlzbiYjMzk7dCBhbnl0aGluZyBJJiMzOTtkIGNvbnNpZGVyIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGVybXMgb2YgdGhlIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0uIFdlJiMzOTtyZSBub3QgdG91Y2hpbmcgY29yZSBhbGdvcml0aG1zIG9yIGFkZGluZyBuZXcgZmVhdHVyZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBleHBsb2l0YWJsZSBmdXp6aW5nIHBvaW50cy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgYWJvdXQgdGhlIGFzc2VydGlvbnMgYW5kLCBhdCBtb3N0LCBzb21lIHZlcnkgbWlub3IgbWFjcm8gb3B0aW1pemF0aW9ucyB0aGF0IGFyZSB0b3RhbGx5IGRlcGVuZGVudCBvbiB0aGUgQ09ORklHX05VTUEgc2V0dGluZy4KClNvLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHRoZXJlIGlzIHNpbXBseSBub3RoaW5nIHdvcnRod2hpbGUgdG8gZnV6eiBoZXJlIGFuZCBpdCBpcyBub3QgYSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24uIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vdmVzIGFuZCBhZGRzIEFTU0VSVF9FWENMVVNJVkVfQklUUyBhc3NlcnRpb25zLCBhbmQgb3B0aW1pemVzIHBhZ2VfdG9fbmlkL2ZvbGlvX25pZCB0byByZXR1cm4gMCBkaXJlY3RseSB3aGVuICFDT05GSUdfTlVNQS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjowNzo1Ni40OTIxOTEzMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE2MjQ0MjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjA3OjU2LjQ5MjE5ODY5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MzMyODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTI2MDVjMmY5YjQ3NWYzMTFhMTczNjUxMDEyNDUyZDk1N2VjMjNjY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjowNzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNTZiMzkxOTQ2MDVhNzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTIyOTQsMTUgKzIyOTQsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKyNpZmRlZiBDT05GSUdfTlVNQVxcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbitcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXFx1MDAzZWZsYWdzLFxcbitcXHRcXHRcXHQgICAgICBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbiBcXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVxcdTAwM2VmbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgTk9ERVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBOT0RFU19QR1NISUZUKTtcXG4gXFx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4rI2Vsc2VcXG4rI2RlZmluZSBwYWdlX3RvX25pZChwYWdlKSAoMClcXG4rI2RlZmluZSBmb2xpb19uaWQoZm9saW8pICgwKVxcbisjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG4gLyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjU2ZGZmYTk2NjM0M2M0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTEyNzQsMTcgKzEyNzQsMTggQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpXFxuIHtcXG4tXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgXFx1MDAzY1xcdTAwM2MgWk9ORVNfUEdTSElGVCk7XFxuIFxcdHJldHVybiAoZmxhZ3MuZiBcXHUwMDNlXFx1MDAzZSBaT05FU19QR1NISUZUKSBcXHUwMDI2IFpPTkVTX01BU0s7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuK1xcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhwYWdlLVxcdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBaT05FU19QR1NISUZUKTtcXG4gXFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmb2xpby1cXHUwMDNlZmxhZ3MsIFpPTkVTX01BU0sgXFx1MDAzY1xcdTAwM2MgWk9ORVNfUEdTSElGVCk7XFxuIFxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDc6NTYuOTI5NTQ3MzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTcyNTA3OTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTI2MDVjMmY5YjQ3NWYzMTFhMTczNjUxMDEyNDUyZDk1N2VjMjNjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA2OjA3OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNTZiMzkxOTQ2MDVhNzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTIyOTQsMTUgKzIyOTQsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcbiB9XG4gI2VuZGlmXG4gXG4rI2lmZGVmIENPTkZJR19OVU1BXG4gc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVx1MDAzZWZsYWdzLFxuK1x0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVx1MDAzZWZsYWdzLFxuK1x0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4rI2Vsc2VcbisjZGVmaW5lIHBhZ2VfdG9fbmlkKHBhZ2UpICgwKVxuKyNkZWZpbmUgZm9saW9fbmlkKGZvbGlvKSAoMClcbisjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4gLyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi41NmRmZmE5NjYzNDNjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC0xMjc0LDE3ICsxMjc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcbiB7XG4tXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gKGZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMocGFnZS1cdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tXHUwMDNlZmxhZ3MsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDc6NTYuOTI5NTQ5MTc5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3MjU2OTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBhbmQgYGluY2x1ZGUvbGludXgvbW16b25lLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5P1wiIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIG1hY3JvIGFuZCBob3cgaXQncyB1c2VkIHRvIHZhbGlkYXRlIGJpdCBmaWVsZHMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIG1vdmluZyB0aGUgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgZnJvbSBgbWVtZGVzY196b25lbnVtYCB0byBgcGFnZV96b25lbnVtYCBhbmQgYGZvbGlvX3pvbmVudW1gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgY2FuIHNlZSB3aGF0IHRoZXkgYXJlIGFpbWluZyB0byBkbyBoZXJlLCBjaGVja2luZyB0aGUgZmxhZ3MgcGFzc2VkIGludG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5UaGVuIGl0IGFkZHMgdGhlIHNhbWUgYXNzZXJ0aW9uIHRvIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgLCBidXQgKm9ubHkqIHVuZGVyIGBDT05GSUdfTlVNQWAsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoYXQgdGhlIGV4aXN0aW5nIGJlaGF2aW9yIHVuZGVyIGAhQ09ORklHX05VTUFgIGNvdWxkIGJlIHNpZ25pZmljYW50LiBJdCB0aGVuIGRlZmluZXMgdGhlbSB0byBqdXN0IHJldHVybiBgKDApYCB3aGVuIGAhQ09ORklHX05VTUFgLiBTbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhZGRpbmcgdGhpcyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgYml0cyB1c2VkIGZvciB0aGUgbm9kZSBJRCBhcmUgZXhjbHVzaXZlbHkgc2V0LiBUaGlzIHNvdW5kcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBiaXQgY29sbGlzaW9ucyBvciBtaXNpbnRlcnByZXRhdGlvbnMuXG5cbkkgdGFrZSBhIGNsb3NlciBsb29rIGFuZCByZWFsaXNlIHRoYXQgdGhlIHBhdGNoIGNoYW5nZXMgdGhlc2UgbGluZXM6XG5cbmBgYGNcbisjaWZkZWYgQ09ORklHX05VTUFcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MsXG4rXHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tXHUwMDNlZmxhZ3MsXG4rXHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXHUwMDNlZmxhZ3MpO1xuIH1cbisjZWxzZVxuKyNkZWZpbmUgcGFnZV90b19uaWQocGFnZSkgKDApXG4rI2RlZmluZSBmb2xpb19uaWQoZm9saW8pICgwKVxuKyNlbmRpZlxuYGBgXG5cbkFuZCB0aGVzZSBsaW5lczpcblxuYGBgY1xuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcbiB7XG4tXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gKGZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMocGFnZS1cdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tXHUwMDNlZmxhZ3MsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuYGBgXG5cbkknbSB0aGlua2luZywgXCJUaGVzZSBhcmUgcHVyZWx5IGFzc2VydGlvbnNcIiwgb3IgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIGAhQ09ORklHX05VTUFgLiBJZiBzbyB0aGV5IHdlcmUgcHJvYmFibHkgYWxyZWFkeSByZXR1cm5pbmcgMCBvciBkb2luZyBzb21ldGhpbmcgc2ltaWxhciwgb3IgZml4aW5nIGEgYnVpbGQgaXNzdWUuXCIgVGhlbiB0aGUgXCJXYWl0IGEgc2Vjb25kXCIgbW9tZW50IGNvbWVzLiBXaGF0ICpkaWQqIGBwYWdlX3RvX25pZGAgYWN0dWFsbHkgZG8gYmVmb3JlIHdoZW4gYCFDT05GSUdfTlVNQWA/IEkgbmVlZCB0byBjaGVjayB0aGUgcHJlLXBhdGNoIHZlcnNpb24gb2YgYGluY2x1ZGUvbGludXgvbW0uaGAgdG8gY29uZmlybSB0aGUgb3JpZ2luYWwgYmVoYXZpb3VyLiBUaGUgc2FtZSBnb2VzIGZvciB0aGUgYG1lbWRlc2NfbmlkYCBmdW5jdGlvbi4gSXQncyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gVG8gY29uZmlybSB0aGUgYmVoYXZpb3VyIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoZSBjb2RlIGFyb3VuZCB0aGUgYG1lbWRlc2NfbmlkYCBmdW5jdGlvbi4gTG9va3MgbGlrZSBsaW5lIDIyOTQgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDg6MDYuMzAyMTIwMjU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODU1MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWRlc2NfbmlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9MjI4Mz1zdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI4OC0jaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMjg5OmludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5MC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkxOnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTIyOTg9c3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMS1cXHRcXHRcXHQgICAgICBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMzAyOlxcdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cXHUwMDNlZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMzAzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yMzA1PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDgtXFx0XFx0XFx0ICAgICAgTk9ERVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBOT0RFU19QR1NISUZUKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwOTpcXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXFx1MDAzZWZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMxMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjA4OjA2LjM3MDk4ODY3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTkxODczOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgTGFuZHNjYXBlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBhIGNoYW5nZSBpbiB0aGUgZGVmaW5pdGlvbnMuIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgIHdlcmUgYWx3YXlzIGF2YWlsYWJsZSwgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkuIE5vdywgdGhleSdyZSBzdWRkZW5seSB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jay4gVGhhdCdzIGEgcmVkIGZsYWcg4oCTIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBub2RlIGFzc29jaWF0aW9uIGlzIGhhbmRsZWQuXG5cblRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBxdWVzdGlvbjogaWYgYENPTkZJR19OVU1BYCBpcyAqbm90KiBkZWZpbmVkIChpLmUuLCBgIUNPTkZJR19OVU1BYCksIHdoYXQgd2FzIGBtZW1kZXNjX25pZGAgZG9pbmc/IEl0IHNlZW1zIGxpa2UgdGhpcyBtaWdodCBiZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgbWVtZGVzY19uaWRgIHByb3ZpZGVzLiBMZXQncyBkZWx2ZSBpbnRvIGl0cyBkZWZpbml0aW9uIGFuZCB1bnJhdmVsIGl0cyBwdXJwb3NlIGluIHRoZSBhYnNlbmNlIG9mIE5VTUEuIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTEyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDg6MDkuNTMwMTc4NjMyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzA0NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWRlc2NfbmlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9MjI4Mz1zdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI4OC0jaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMjg5OmludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5MC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkxOnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTIyOTg9c3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMS1cXHRcXHRcXHQgICAgICBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMzAyOlxcdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cXHUwMDNlZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMzAzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yMzA1PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDgtXFx0XFx0XFx0ICAgICAgTk9ERVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBOT0RFU19QR1NISUZUKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwOTpcXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXFx1MDAzZWZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMxMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjA4OjA5LjU5MzQ5MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU1OTYyNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvbW0uaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjg4LiBUaGF0IHNob3VsZCBiZSB0aGUgYXJlYSBkZWFsaW5nIHdpdGggW2luc2VydCB5b3VyIGFzc3VtcHRpb24gb2Ygd2hhdCBsaW5lIDIyODggZGVhbHMgd2l0aCwgZS5nLiwgXCJ0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gZm9yIHRoZSBgc3RydWN0IHZtX2FyZWFfc3RydWN0YCBvciBpdHMgcmVsYXRlZCBmdW5jdGlvbnNcIl0uIEkgYW50aWNpcGF0ZSB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGxvdy1sZXZlbCBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyBjZW50cmFsIHRvIHRoZSBvcGVyYXRpb24gSSdtIGludmVzdGlnYXRpbmcuIEkgZXhwZWN0IGl0IHRvIGhhdmUgdGhlIGNydWNpYWwgcGllY2VzIEknbSBsb29raW5nIGZvciAtIHdoZXRoZXIgaXQgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFwcywgcGFnZSB0YWJsZXMgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEknbSBleHBlY3RpbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzIHJlZ2FyZGluZyB3aGF0IEkgaGF2ZSBwcmV2aW91c2x5IGJlZW4gZXhhbWluaW5nLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCByaWdodCBkb3duIHRvIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjowODoxMi42NDk0NTU1MDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODA6XFx0ICogV2Ugb25seSBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBmb3IgdHdvIGNvbWJpbmFibGVcXG4yMjgxOlxcdCAqIHBhZ2VzIGluIGEgem9uZS5cXG4yMjgyOlxcdCAqL1xcbjIyODM6XFx0c3RhdGljIGlubGluZSBpbnQgcGFnZV96b25lX2lkKHN0cnVjdCBwYWdlICpwYWdlKVxcbjIyODQ6XFx0e1xcbjIyODU6XFx0XFx0cmV0dXJuIChwYWdlLVxcdTAwM2VmbGFncy5mIFxcdTAwM2VcXHUwMDNlIFpPTkVJRF9QR1NISUZUKSBcXHUwMDI2IFpPTkVJRF9NQVNLO1xcbjIyODY6XFx0fVxcbjIyODc6XFx0XFxuMjI4ODpcXHQjaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xcbjIyODk6XFx0aW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xcbjIyOTA6XFx0I2Vsc2VcXG4yMjkxOlxcdHN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuMjI5MjpcXHR7XFxuMjI5MzpcXHRcXHRyZXR1cm4gKG1kZi5mIFxcdTAwM2VcXHUwMDNlIE5PREVTX1BHU0hJRlQpIFxcdTAwMjYgTk9ERVNfTUFTSztcXG4yMjk0OlxcdH1cXG4yMjk1OlxcdCNlbmRpZlxcbjIyOTY6XFx0XFxuMjI5NzpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG4yMjk4OlxcdHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbjIyOTk6XFx0e1xcbjIzMDA6XFx0XFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVxcdTAwM2VmbGFncyxcXG4yMzAxOlxcdFxcdFxcdFxcdCAgICAgIE5PREVTX01BU0sgXFx1MDAzY1xcdTAwM2MgTk9ERVNfUEdTSElGVCk7XFxuMjMwMjpcXHRcXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXFx1MDAzZWZsYWdzKTtcXG4yMzAzOlxcdH1cXG4yMzA0OlxcdFxcbjIzMDU6XFx0c3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMjMwNjpcXHR7XFxuMjMwNzpcXHRcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tXFx1MDAzZWZsYWdzLFxcbjIzMDg6XFx0XFx0XFx0XFx0ICAgICAgTk9ERVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBOT0RFU19QR1NISUZUKTtcXG4yMzA5OlxcdFxcdHJldHVybiBtZW1kZXNjX25pZChmb2xpby1cXHUwMDNlZmxhZ3MpO1xcbjIzMTA6XFx0fVxcbjIzMTE6XFx0I2Vsc2VcXG4yMzEyOlxcdCNkZWZpbmUgcGFnZV90b19uaWQocGFnZSkgKDApXFxuMjMxMzpcXHQjZGVmaW5lIGZvbGlvX25pZChmb2xpbykgKDApXFxuMjMxNDpcXHQjZW5kaWZcXG4yMzE1OlxcdFxcbjIzMTY6XFx0I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbjIzMTc6XFx0LyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXFxuMjMxODpcXHQjZGVmaW5lIFBBR0VfQUNDRVNTX1RJTUVfTUlOX0JJVFNcXHQxMlxcbjIzMTk6XFx0I2lmIExBU1RfQ1BVUElEX1NISUZUIFxcdTAwM2MgUEFHRV9BQ0NFU1NfVElNRV9NSU5fQklUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjowODoxMi42NDk3NTEzMjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODExOTMyMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIgYXQgZmlyc3QgZ2xhbmNlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGEgZGVlcGVyIGNoYW5nZSwgYWZmZWN0aW5nIGhvdyBtZW1vcnkgaXMgbWFuYWdlZC4gQnV0IGFmdGVyIGEgc2Vjb25kIGxvb2ssIGFuZCBjYXJlZnVsbHkgdHJhY2luZyB0aGUgbG9naWMsIEkgc2VlIGl0J3MgcHVyZWx5IGFib3V0IGFzc2VydGlvbnMgYW5kIG1hY3JvIGRlZmluaXRpb25zLCByYXRoZXIgdGhhbiBhbnkgZnVuY3Rpb25hbCBhbHRlcmF0aW9ucy5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIHNoaWZ0aW5nIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGZyb20gYG1lbWRlc2Nfem9uZW51bWAgdG8gYHBhZ2Vfem9uZW51bWAgYW5kIGBmb2xpb196b25lbnVtYC4gTm8gcHJvYmxlbSB0aGVyZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGhhbmRsaW5nIG9mIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgIHVuZGVyIGBDT05GSUdfTlVNQWAgYW5kIHRoZSBpbXBsaWNhdGlvbiB3aGVuIGAhQ09ORklHX05VTUFgLiBJdCBpbnRyb2R1Y2VzIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIHRvIHRob3NlIGZ1bmN0aW9ucyB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZCwgc2V0dGluZyB0aGVtIHRvIGAoMClgIG90aGVyd2lzZS5cblxuTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IGFzIEkgcmV2aWV3ZWQgdGhlIG9yaWdpbmFsIGRlZmluaXRpb25zLCBJIHJlYWxpemVkIHRoZXJlJ3Mgbm8gYWx0ZXJhdGlvbiBpbiBiZWhhdmlvci4gUHJldmlvdXNseSwgYHBhZ2VfdG9fbmlkYCB1bHRpbWF0ZWx5IGNhbGxlZCBgbWVtZGVzY19uaWRgLCB3aGljaCBpbiB0dXJuLCB1c2VkIGJpdCBzaGlmdGluZyBiYXNlZCBvbiBgTk9ERVNfUEdTSElGVGAgYW5kIGBOT0RFU19NQVNLYC4gTm93LCB3aGVuIGAhQ09ORklHX05VTUFgLCB0aGUgYHBhZ2VfdG9fbmlkYCBmdW5jdGlvbiByZXR1cm5zICgwKSBkaXJlY3RseS4gQ29uc2lkZXJpbmcgYE5PREVTX1BHU0hJRlRgIGFuZCBgTk9ERVNfTUFTS2AgYXJlIDAgaW4gdGhhdCBzY2VuYXJpbywgdGhlIHJlc3VsdGluZyB2YWx1ZSB3b3VsZCBoYXZlIGJlZW4gemVybyBhbnl3YXlzLiBUaGlzIGlzIGEgbWFjcm8gb3B0aW1pemF0aW9uLlxuXG5KdXN0IHRvIGJlIGNlcnRhaW4sIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGhlYWRlciBmaWxlIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCB0byBtYWtlIHN1cmUgYWxsIHJlbGF0ZWQgbWFjcm9zIGFyZSBiZWluZyBoYW5kbGVkIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDg6MTguNDYxNjg1Mjk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNzA6XFx0I2RlZmluZSBTRUNUSU9OU19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfV0lEVEgpIC0gMSlcXG4xMjcxOlxcdCNkZWZpbmUgTEFTVF9DUFVQSURfTUFTS1xcdCgoMVVMIFxcdTAwM2NcXHUwMDNjIExBU1RfQ1BVUElEX1NISUZUKSAtIDEpXFxuMTI3MjpcXHQjZGVmaW5lIEtBU0FOX1RBR19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXFxuMTI3MzpcXHQjZGVmaW5lIFpPTkVJRF9NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXFxuMTI3NDpcXHRcXG4xMjc1OlxcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcXG4xMjc2OlxcdHtcXG4xMjc3OlxcdFxcdHJldHVybiAoZmxhZ3MuZiBcXHUwMDNlXFx1MDAzZSBaT05FU19QR1NISUZUKSBcXHUwMDI2IFpPTkVTX01BU0s7XFxuMTI3ODpcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHBhZ2UtXFx1MDAzZWZsYWdzLCBaT05FU19NQVNLIFxcdTAwM2NcXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xcbjEyODM6XFx0XFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLVxcdTAwM2VmbGFncyk7XFxuMTI4NDpcXHR9XFxuMTI4NTpcXHRcXG4xMjg2OlxcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjEyODc6XFx0e1xcbjEyODg6XFx0XFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVxcdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBaT05FU19QR1NISUZUKTtcXG4xMjg5OlxcdFxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4xMjkwOlxcdH1cXG4xMjkxOlxcdFxcbjEyOTI6XFx0I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbjEyOTM6XFx0c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZilcXG4xMjk0OlxcdHtcXG4xMjk1OlxcdFxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0obWRmKSA9PSBaT05FX0RFVklDRTtcXG4xMjk2OlxcdH1cXG4xMjk3OlxcdFxcbjEyOTg6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuMTI5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjA4OjE4LjQ2MTg1MDg5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkyNzQ1OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGFsbCBpdCdzIGRvaW5nIGlzIGFkZGluZyBvciByZWxvY2F0aW5nIHRoZSBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBtYWNybyBhbmQgdGhlbiBjaGFuZ2luZyB0aGUgY2FsbHMgdG8gYHBhZ2VfdG9fbmlkYCBvciBgZm9saW9fbmlkYCB0byBqdXN0IHJldHVybiBgKDApYCB3aGVuIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIE5VTUEgZW5hYmxlZCDigJMgd2hpY2gsIGluIG15IGV4cGVyaWVuY2UsIGlzIGEgZmFpcmx5IGNvbW1vbiBhbmQgZXhwZWN0ZWQgb3B0aW1pemF0aW9uIGluIHRoYXQgc2NlbmFyaW8uXG5cbkhvbmVzdGx5LCB0aGlzIGlzbid0IGFueXRoaW5nIEknZCBjb25zaWRlciBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBXZSdyZSBub3QgdG91Y2hpbmcgY29yZSBhbGdvcml0aG1zIG9yIGFkZGluZyBuZXcgZmVhdHVyZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBleHBsb2l0YWJsZSBmdXp6aW5nIHBvaW50cy4gSXQncyByZWFsbHkganVzdCBhYm91dCB0aGUgYXNzZXJ0aW9ucyBhbmQsIGF0IG1vc3QsIHNvbWUgdmVyeSBtaW5vciBtYWNybyBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHRvdGFsbHkgZGVwZW5kZW50IG9uIHRoZSBDT05GSUdfTlVNQSBzZXR0aW5nLlxuXG5TbywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLCB0aGVyZSBpcyBzaW1wbHkgbm90aGluZyB3b3J0aHdoaWxlIHRvIGZ1enogaGVyZSBhbmQgaXQgaXMgbm90IGEgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGV4cGxvcmF0aW9uLiBJJ2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5NywiT3V0cHV0VG9rZW5zIjo4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDg6MjIuNjU0NTk5NDk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW92ZXMgYW5kIGFkZHMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIGFzc2VydGlvbnMsIGFuZCBvcHRpbWl6ZXMgcGFnZV90b19uaWQvZm9saW9fbmlkIHRvIHJldHVybiAwIGRpcmVjdGx5IHdoZW4gIUNPTkZJR19OVU1BLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyB0aGF0IHJlcXVpcmVzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowk52t8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 05:56:26 +0000 UTC FinishedAt: 2026-06-25 06:08:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW92ZXMgYW5kIGFkZHMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIGFzc2VydGlvbnMsIGFuZCBvcHRpbWl6ZXMgcGFnZV90b19uaWQvZm9saW9fbmlkIHRvIHJldHVybiAwIGRpcmVjdGx5IHdoZW4gIUNPTkZJR19OVU1BLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyB0aGF0IHJlcXVpcmVzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTI2MDVjMmY5YjQ3NWYzMTFhMTczNjUxMDEyNDUyZDk1N2VjMjNjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA2OjA3OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjU2YjM5MTk0NjA1YTc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yMjk0LDE1ICYjNDM7MjI5NCwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4gc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuJiM0MztcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cdTAwM2VmbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4mIzQzO1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0XHQgICAgICBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbiBcdHJldHVybiBtZW1kZXNjX25pZChmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIHBhZ2VfdG9fbmlkKHBhZ2UpICgwKVxuJiM0MzsjZGVmaW5lIGZvbGlvX25pZChmb2xpbykgKDApXG4mIzQzOyNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiAvKiBwYWdlIGFjY2VzcyB0aW1lIGJpdHMgbmVlZHMgdG8gaG9sZCBhdCBsZWFzdCA0IHNlY29uZHMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjU2ZGZmYTk2NjM0M2M0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTEyNzQsMTcgJiM0MzsxMjc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcbiB7XG4tXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gKGZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4mIzQzO1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHBhZ2UtXHUwMDNlZmxhZ3MsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBmb2xpb196b25lbnVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmb2xpby1cdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKGZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUyNjA1YzJmOWI0NzVmMzExYTE3MzY1MTAxMjQ1MmQ5NTdlYzIzY2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAwNjowNzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiMy4uNTZiMzkxOTQ2MDVhNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTIyOTQsMTUgJiM0MzsyMjk0LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiB9CiAjZW5kaWYKIAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQogc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiYjNDM7CUFTU0VSVF9FWENMVVNJVkVfQklUUyhQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS0mZ3Q7ZmxhZ3MsCiYjNDM7CQkJICAgICAgTk9ERVNfTUFTSyAmbHQ7Jmx0OyBOT0RFU19QR1NISUZUKTsKIAlyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiYjNDM7CUFTU0VSVF9FWENMVVNJVkVfQklUUyhmb2xpby0mZ3Q7ZmxhZ3MsCiYjNDM7CQkJICAgICAgTk9ERVNfTUFTSyAmbHQ7Jmx0OyBOT0RFU19QR1NISUZUKTsKIAlyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tJmd0O2ZsYWdzKTsKIH0KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgcGFnZV90b19uaWQocGFnZSkgKDApCiYjNDM7I2RlZmluZSBmb2xpb19uaWQoZm9saW8pICgwKQomIzQzOyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCiAvKiBwYWdlIGFjY2VzcyB0aW1lIGJpdHMgbmVlZHMgdG8gaG9sZCBhdCBsZWFzdCA0IHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi41NmRmZmE5NjYzNDNjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0xMjc0LDE3ICYjNDM7MTI3NCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKIAogc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0obWVtZGVzY19mbGFnc190IGZsYWdzKQogewotCUFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncy5mLCBaT05FU19NQVNLICZsdDsmbHQ7IFpPTkVTX1BHU0hJRlQpOwogCXJldHVybiAoZmxhZ3MuZiAmZ3Q7Jmd0OyBaT05FU19QR1NISUZUKSAmYW1wOyBaT05FU19NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKJiM0MzsJQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHBhZ2UtJmd0O2ZsYWdzLCBaT05FU19NQVNLICZsdDsmbHQ7IFpPTkVTX1BHU0hJRlQpOwogCXJldHVybiBtZW1kZXNjX3pvbmVudW0ocGFnZS0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKJiM0MzsJQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLSZndDtmbGFncywgWk9ORVNfTUFTSyAmbHQ7Jmx0OyBaT05FU19QR1NISUZUKTsKIAlyZXR1cm4gbWVtZGVzY196b25lbnVtKGZvbGlvLSZndDtmbGFncyk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpbmNsdWRlL2xpbnV4L21tLmhgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5PyYjMzQ7IEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIG1hY3JvIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB0byB2YWxpZGF0ZSBiaXQgZmllbGRzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBtb3ZpbmcgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGZyb20gYG1lbWRlc2Nfem9uZW51bWAgdG8gYHBhZ2Vfem9uZW51bWAgYW5kIGBmb2xpb196b25lbnVtYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBjYW4gc2VlIHdoYXQgdGhleSBhcmUgYWltaW5nIHRvIGRvIGhlcmUsIGNoZWNraW5nIHRoZSBmbGFncyBwYXNzZWQgaW50byB0aG9zZSBmdW5jdGlvbnMuCgpUaGVuIGl0IGFkZHMgdGhlIHNhbWUgYXNzZXJ0aW9uIHRvIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgLCBidXQgKm9ubHkqIHVuZGVyIGBDT05GSUdfTlVNQWAsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoYXQgdGhlIGV4aXN0aW5nIGJlaGF2aW9yIHVuZGVyIGAhQ09ORklHX05VTUFgIGNvdWxkIGJlIHNpZ25pZmljYW50LiBJdCB0aGVuIGRlZmluZXMgdGhlbSB0byBqdXN0IHJldHVybiBgKDApYCB3aGVuIGAhQ09ORklHX05VTUFgLiBTbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhZGRpbmcgdGhpcyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgYml0cyB1c2VkIGZvciB0aGUgbm9kZSBJRCBhcmUgZXhjbHVzaXZlbHkgc2V0LiBUaGlzIHNvdW5kcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IGFjY2lkZW50YWwgYml0IGNvbGxpc2lvbnMgb3IgbWlzaW50ZXJwcmV0YXRpb25zLgoKSSB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIHJlYWxpc2UgdGhhdCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGVzZSBsaW5lczoKCmBgYGMKJiM0MzsjaWZkZWYgQ09ORklHX05VTUEKIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktJmd0O2ZsYWdzLAomIzQzOwkJCSAgICAgIE5PREVTX01BU0sgJmx0OyZsdDsgTk9ERVNfUEdTSElGVCk7CiAJcmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tJmd0O2ZsYWdzLAomIzQzOwkJCSAgICAgIE5PREVTX01BU0sgJmx0OyZsdDsgTk9ERVNfUEdTSElGVCk7CiAJcmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLSZndDtmbGFncyk7CiB9CiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIHBhZ2VfdG9fbmlkKHBhZ2UpICgwKQomIzQzOyNkZWZpbmUgZm9saW9fbmlkKGZvbGlvKSAoMCkKJiM0MzsjZW5kaWYKYGBgCgpBbmQgdGhlc2UgbGluZXM6CgpgYGBjCiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpCiB7Ci0JQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgJmx0OyZsdDsgWk9ORVNfUEdTSElGVCk7CiAJcmV0dXJuIChmbGFncy5mICZndDsmZ3Q7IFpPTkVTX1BHU0hJRlQpICZhbXA7IFpPTkVTX01BU0s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMocGFnZS0mZ3Q7ZmxhZ3MsIFpPTkVTX01BU0sgJmx0OyZsdDsgWk9ORVNfUEdTSElGVCk7CiAJcmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tJmd0O2ZsYWdzLCBaT05FU19NQVNLICZsdDsmbHQ7IFpPTkVTX1BHU0hJRlQpOwogCXJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tJmd0O2ZsYWdzKTsKIH0KYGBgCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O1RoZXNlIGFyZSBwdXJlbHkgYXNzZXJ0aW9ucyYjMzQ7LCBvciBtYWNybyBkZWZpbml0aW9ucyBmb3IgYCFDT05GSUdfTlVNQWAuIElmIHNvIHRoZXkgd2VyZSBwcm9iYWJseSBhbHJlYWR5IHJldHVybmluZyAwIG9yIGRvaW5nIHNvbWV0aGluZyBzaW1pbGFyLCBvciBmaXhpbmcgYSBidWlsZCBpc3N1ZS4mIzM0OyBUaGVuIHRoZSAmIzM0O1dhaXQgYSBzZWNvbmQmIzM0OyBtb21lbnQgY29tZXMuIFdoYXQgKmRpZCogYHBhZ2VfdG9fbmlkYCBhY3R1YWxseSBkbyBiZWZvcmUgd2hlbiBgIUNPTkZJR19OVU1BYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBwcmUtcGF0Y2ggdmVyc2lvbiBvZiBgaW5jbHVkZS9saW51eC9tbS5oYCB0byBjb25maXJtIHRoZSBvcmlnaW5hbCBiZWhhdmlvdXIuIFRoZSBzYW1lIGdvZXMgZm9yIHRoZSBgbWVtZGVzY19uaWRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gVG8gY29uZmlybSB0aGUgYmVoYXZpb3VyIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoZSBjb2RlIGFyb3VuZCB0aGUgYG1lbWRlc2NfbmlkYCBmdW5jdGlvbi4gTG9va3MgbGlrZSBsaW5lIDIyOTQgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWRlc2NfbmlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD0yMjgzPXN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI4OC0jaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xuaW5jbHVkZS9saW51eC9tbS5oOjIyODk6aW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIyOTAtI2Vsc2VcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkxOnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5Mi17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTIyOTg9c3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDEtXHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwMjpcdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cdTAwM2VmbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMy19XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTIzMDU9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDgtXHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwOTpcdHJldHVybiBtZW1kZXNjX25pZChmb2xpby1cdTAwM2VmbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMjMxMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIExhbmRzY2FwZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIHNlZWluZyBhIGNoYW5nZSBpbiB0aGUgZGVmaW5pdGlvbnMuIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgIHdlcmUgYWx3YXlzIGF2YWlsYWJsZSwgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkuIE5vdywgdGhleSYjMzk7cmUgc3VkZGVubHkgd3JhcHBlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTlVNQWAgYmxvY2suIFRoYXQmIzM5O3MgYSByZWQgZmxhZyDigJMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgbWVtb3J5IG5vZGUgYXNzb2NpYXRpb24gaXMgaGFuZGxlZC4KClRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBxdWVzdGlvbjogaWYgYENPTkZJR19OVU1BYCBpcyAqbm90KiBkZWZpbmVkIChpLmUuLCBgIUNPTkZJR19OVU1BYCksIHdoYXQgd2FzIGBtZW1kZXNjX25pZGAgZG9pbmc/IEl0IHNlZW1zIGxpa2UgdGhpcyBtaWdodCBiZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgbWVtZGVzY19uaWRgIHByb3ZpZGVzLiBMZXQmIzM5O3MgZGVsdmUgaW50byBpdHMgZGVmaW5pdGlvbiBhbmQgdW5yYXZlbCBpdHMgcHVycG9zZSBpbiB0aGUgYWJzZW5jZSBvZiBOVU1BLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1kZXNjX25pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9MjI4Mz1zdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTIyODgtI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcbmluY2x1ZGUvbGludXgvbW0uaDoyMjg5OmludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcbmluY2x1ZGUvbGludXgvbW0uaC0yMjkwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5MTpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTIte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yMjk4PXN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMzAxLVx0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuaW5jbHVkZS9saW51eC9tbS5oOjIzMDI6XHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIzMDMtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yMzA1PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMzA4LVx0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuaW5jbHVkZS9saW51eC9tbS5oOjIzMDk6XHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXHUwMDNlZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIzMTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjI4OC4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgZGVhbGluZyB3aXRoIFtpbnNlcnQgeW91ciBhc3N1bXB0aW9uIG9mIHdoYXQgbGluZSAyMjg4IGRlYWxzIHdpdGgsIGUuZy4sICYjMzQ7dGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAgb3IgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zJiMzNDtdLiBJIGFudGljaXBhdGUgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBsb3ctbGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgY2VudHJhbCB0byB0aGUgb3BlcmF0aW9uIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSBleHBlY3QgaXQgdG8gaGF2ZSB0aGUgY3J1Y2lhbCBwaWVjZXMgSSYjMzk7bSBsb29raW5nIGZvciAtIHdoZXRoZXIgaXQgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFwcywgcGFnZSB0YWJsZXMgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGxvb2sgZm9yIGFueSBjbHVlcyByZWdhcmRpbmcgd2hhdCBJIGhhdmUgcHJldmlvdXNseSBiZWVuIGV4YW1pbmluZy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgcmlnaHQgZG93biB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODA6XHQgKiBXZSBvbmx5IGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGZvciB0d28gY29tYmluYWJsZVxuMjI4MTpcdCAqIHBhZ2VzIGluIGEgem9uZS5cbjIyODI6XHQgKi9cbjIyODM6XHRzdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4yMjg0Olx0e1xuMjI4NTpcdFx0cmV0dXJuIChwYWdlLVx1MDAzZWZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVJRF9QR1NISUZUKSBcdTAwMjYgWk9ORUlEX01BU0s7XG4yMjg2Olx0fVxuMjI4NzpcdFxuMjI4ODpcdCNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXG4yMjg5Olx0aW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuMjI5MDpcdCNlbHNlXG4yMjkxOlx0c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcbjIyOTI6XHR7XG4yMjkzOlx0XHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBOT0RFU19QR1NISUZUKSBcdTAwMjYgTk9ERVNfTUFTSztcbjIyOTQ6XHR9XG4yMjk1Olx0I2VuZGlmXG4yMjk2Olx0XG4yMjk3Olx0I2lmZGVmIENPTkZJR19OVU1BXG4yMjk4Olx0c3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4yMjk5Olx0e1xuMjMwMDpcdFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVx1MDAzZWZsYWdzLFxuMjMwMTpcdFx0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuMjMwMjpcdFx0cmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVx1MDAzZWZsYWdzKTtcbjIzMDM6XHR9XG4yMzA0Olx0XG4yMzA1Olx0c3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4yMzA2Olx0e1xuMjMwNzpcdFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVx1MDAzZWZsYWdzLFxuMjMwODpcdFx0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuMjMwOTpcdFx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbjIzMTA6XHR9XG4yMzExOlx0I2Vsc2VcbjIzMTI6XHQjZGVmaW5lIHBhZ2VfdG9fbmlkKHBhZ2UpICgwKVxuMjMxMzpcdCNkZWZpbmUgZm9saW9fbmlkKGZvbGlvKSAoMClcbjIzMTQ6XHQjZW5kaWZcbjIzMTU6XHRcbjIzMTY6XHQjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4yMzE3Olx0LyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXG4yMzE4Olx0I2RlZmluZSBQQUdFX0FDQ0VTU19USU1FX01JTl9CSVRTXHQxMlxuMjMxOTpcdCNpZiBMQVNUX0NQVVBJRF9TSElGVCBcdTAwM2MgUEFHRV9BQ0NFU1NfVElNRV9NSU5fQklUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIgYXQgZmlyc3QgZ2xhbmNlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGEgZGVlcGVyIGNoYW5nZSwgYWZmZWN0aW5nIGhvdyBtZW1vcnkgaXMgbWFuYWdlZC4gQnV0IGFmdGVyIGEgc2Vjb25kIGxvb2ssIGFuZCBjYXJlZnVsbHkgdHJhY2luZyB0aGUgbG9naWMsIEkgc2VlIGl0JiMzOTtzIHB1cmVseSBhYm91dCBhc3NlcnRpb25zIGFuZCBtYWNybyBkZWZpbml0aW9ucywgcmF0aGVyIHRoYW4gYW55IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHNoaWZ0aW5nIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGZyb20gYG1lbWRlc2Nfem9uZW51bWAgdG8gYHBhZ2Vfem9uZW51bWAgYW5kIGBmb2xpb196b25lbnVtYC4gTm8gcHJvYmxlbSB0aGVyZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGhhbmRsaW5nIG9mIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgIHVuZGVyIGBDT05GSUdfTlVNQWAgYW5kIHRoZSBpbXBsaWNhdGlvbiB3aGVuIGAhQ09ORklHX05VTUFgLiBJdCBpbnRyb2R1Y2VzIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIHRvIHRob3NlIGZ1bmN0aW9ucyB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZCwgc2V0dGluZyB0aGVtIHRvIGAoMClgIG90aGVyd2lzZS4KCk15IGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UsIGJ1dCBhcyBJIHJldmlld2VkIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9ucywgSSByZWFsaXplZCB0aGVyZSYjMzk7cyBubyBhbHRlcmF0aW9uIGluIGJlaGF2aW9yLiBQcmV2aW91c2x5LCBgcGFnZV90b19uaWRgIHVsdGltYXRlbHkgY2FsbGVkIGBtZW1kZXNjX25pZGAsIHdoaWNoIGluIHR1cm4sIHVzZWQgYml0IHNoaWZ0aW5nIGJhc2VkIG9uIGBOT0RFU19QR1NISUZUYCBhbmQgYE5PREVTX01BU0tgLiBOb3csIHdoZW4gYCFDT05GSUdfTlVNQWAsIHRoZSBgcGFnZV90b19uaWRgIGZ1bmN0aW9uIHJldHVybnMgKDApIGRpcmVjdGx5LiBDb25zaWRlcmluZyBgTk9ERVNfUEdTSElGVGAgYW5kIGBOT0RFU19NQVNLYCBhcmUgMCBpbiB0aGF0IHNjZW5hcmlvLCB0aGUgcmVzdWx0aW5nIHZhbHVlIHdvdWxkIGhhdmUgYmVlbiB6ZXJvIGFueXdheXMuIFRoaXMgaXMgYSBtYWNybyBvcHRpbWl6YXRpb24uCgpKdXN0IHRvIGJlIGNlcnRhaW4sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBoZWFkZXIgZmlsZSBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAgdG8gbWFrZSBzdXJlIGFsbCByZWxhdGVkIG1hY3JvcyBhcmUgYmVpbmcgaGFuZGxlZCBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjcwOlx0I2RlZmluZSBTRUNUSU9OU19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19XSURUSCkgLSAxKVxuMTI3MTpcdCNkZWZpbmUgTEFTVF9DUFVQSURfTUFTS1x0KCgxVUwgXHUwMDNjXHUwMDNjIExBU1RfQ1BVUElEX1NISUZUKSAtIDEpXG4xMjcyOlx0I2RlZmluZSBLQVNBTl9UQUdfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXG4xMjczOlx0I2RlZmluZSBaT05FSURfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXG4xMjc0Olx0XG4xMjc1Olx0c3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0obWVtZGVzY19mbGFnc190IGZsYWdzKVxuMTI3NjpcdHtcbjEyNzc6XHRcdHJldHVybiAoZmxhZ3MuZiBcdTAwM2VcdTAwM2UgWk9ORVNfUEdTSElGVCkgXHUwMDI2IFpPTkVTX01BU0s7XG4xMjc4Olx0fVxuMTI3OTpcdFxuMTI4MDpcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuMTI4MTpcdHtcbjEyODI6XHRcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhwYWdlLVx1MDAzZWZsYWdzLCBaT05FU19NQVNLIFx1MDAzY1x1MDAzYyBaT05FU19QR1NISUZUKTtcbjEyODM6XHRcdHJldHVybiBtZW1kZXNjX3pvbmVudW0ocGFnZS1cdTAwM2VmbGFncyk7XG4xMjg0Olx0fVxuMTI4NTpcdFxuMTI4NjpcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTI4NzpcdHtcbjEyODg6XHRcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmb2xpby1cdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4xMjg5Olx0XHRyZXR1cm4gbWVtZGVzY196b25lbnVtKGZvbGlvLVx1MDAzZWZsYWdzKTtcbjEyOTA6XHR9XG4xMjkxOlx0XG4xMjkyOlx0I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuMTI5MzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4xMjk0Olx0e1xuMTI5NTpcdFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFO1xuMTI5NjpcdH1cbjEyOTc6XHRcbjEyOTg6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbjEyOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTcKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGFsbCBpdCYjMzk7cyBkb2luZyBpcyBhZGRpbmcgb3IgcmVsb2NhdGluZyB0aGUgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgbWFjcm8gYW5kIHRoZW4gY2hhbmdpbmcgdGhlIGNhbGxzIHRvIGBwYWdlX3RvX25pZGAgb3IgYGZvbGlvX25pZGAgdG8ganVzdCByZXR1cm4gYCgwKWAgd2hlbiB0aGUgc3lzdGVtIGRvZXNuJiMzOTt0IGhhdmUgTlVNQSBlbmFibGVkIOKAkyB3aGljaCwgaW4gbXkgZXhwZXJpZW5jZSwgaXMgYSBmYWlybHkgY29tbW9uIGFuZCBleHBlY3RlZCBvcHRpbWl6YXRpb24gaW4gdGhhdCBzY2VuYXJpby4KCkhvbmVzdGx5LCB0aGlzIGlzbiYjMzk7dCBhbnl0aGluZyBJJiMzOTtkIGNvbnNpZGVyIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGVybXMgb2YgdGhlIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0uIFdlJiMzOTtyZSBub3QgdG91Y2hpbmcgY29yZSBhbGdvcml0aG1zIG9yIGFkZGluZyBuZXcgZmVhdHVyZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBleHBsb2l0YWJsZSBmdXp6aW5nIHBvaW50cy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgYWJvdXQgdGhlIGFzc2VydGlvbnMgYW5kLCBhdCBtb3N0LCBzb21lIHZlcnkgbWlub3IgbWFjcm8gb3B0aW1pemF0aW9ucyB0aGF0IGFyZSB0b3RhbGx5IGRlcGVuZGVudCBvbiB0aGUgQ09ORklHX05VTUEgc2V0dGluZy4KClNvLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHRoZXJlIGlzIHNpbXBseSBub3RoaW5nIHdvcnRod2hpbGUgdG8gZnV6eiBoZXJlIGFuZCBpdCBpcyBub3QgYSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24uIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vdmVzIGFuZCBhZGRzIEFTU0VSVF9FWENMVVNJVkVfQklUUyBhc3NlcnRpb25zLCBhbmQgb3B0aW1pemVzIHBhZ2VfdG9fbmlkL2ZvbGlvX25pZCB0byByZXR1cm4gMCBkaXJlY3RseSB3aGVuICFDT05GSUdfTlVNQS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjowNzo1Ni40OTIxOTEzMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE2MjQ0MjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjA3OjU2LjQ5MjE5ODY5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MzMyODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTI2MDVjMmY5YjQ3NWYzMTFhMTczNjUxMDEyNDUyZDk1N2VjMjNjY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjowNzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNTZiMzkxOTQ2MDVhNzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTIyOTQsMTUgKzIyOTQsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKyNpZmRlZiBDT05GSUdfTlVNQVxcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbitcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXFx1MDAzZWZsYWdzLFxcbitcXHRcXHRcXHQgICAgICBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbiBcXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVxcdTAwM2VmbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgTk9ERVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBOT0RFU19QR1NISUZUKTtcXG4gXFx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4rI2Vsc2VcXG4rI2RlZmluZSBwYWdlX3RvX25pZChwYWdlKSAoMClcXG4rI2RlZmluZSBmb2xpb19uaWQoZm9saW8pICgwKVxcbisjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG4gLyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjU2ZGZmYTk2NjM0M2M0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTEyNzQsMTcgKzEyNzQsMTggQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpXFxuIHtcXG4tXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgXFx1MDAzY1xcdTAwM2MgWk9ORVNfUEdTSElGVCk7XFxuIFxcdHJldHVybiAoZmxhZ3MuZiBcXHUwMDNlXFx1MDAzZSBaT05FU19QR1NISUZUKSBcXHUwMDI2IFpPTkVTX01BU0s7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuK1xcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhwYWdlLVxcdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBaT05FU19QR1NISUZUKTtcXG4gXFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmb2xpby1cXHUwMDNlZmxhZ3MsIFpPTkVTX01BU0sgXFx1MDAzY1xcdTAwM2MgWk9ORVNfUEdTSElGVCk7XFxuIFxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDc6NTYuOTI5NTQ3MzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTcyNTA3OTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTI2MDVjMmY5YjQ3NWYzMTFhMTczNjUxMDEyNDUyZDk1N2VjMjNjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA2OjA3OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNTZiMzkxOTQ2MDVhNzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTIyOTQsMTUgKzIyOTQsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcbiB9XG4gI2VuZGlmXG4gXG4rI2lmZGVmIENPTkZJR19OVU1BXG4gc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVx1MDAzZWZsYWdzLFxuK1x0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVx1MDAzZWZsYWdzLFxuK1x0XHRcdCAgICAgIE5PREVTX01BU0sgXHUwMDNjXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbiB9XG4rI2Vsc2VcbisjZGVmaW5lIHBhZ2VfdG9fbmlkKHBhZ2UpICgwKVxuKyNkZWZpbmUgZm9saW9fbmlkKGZvbGlvKSAoMClcbisjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4gLyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi41NmRmZmE5NjYzNDNjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC0xMjc0LDE3ICsxMjc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcbiB7XG4tXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gKGZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMocGFnZS1cdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tXHUwMDNlZmxhZ3MsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDc6NTYuOTI5NTQ5MTc5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3MjU2OTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBhbmQgYGluY2x1ZGUvbGludXgvbW16b25lLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5P1wiIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIG1hY3JvIGFuZCBob3cgaXQncyB1c2VkIHRvIHZhbGlkYXRlIGJpdCBmaWVsZHMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIG1vdmluZyB0aGUgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgZnJvbSBgbWVtZGVzY196b25lbnVtYCB0byBgcGFnZV96b25lbnVtYCBhbmQgYGZvbGlvX3pvbmVudW1gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgY2FuIHNlZSB3aGF0IHRoZXkgYXJlIGFpbWluZyB0byBkbyBoZXJlLCBjaGVja2luZyB0aGUgZmxhZ3MgcGFzc2VkIGludG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5UaGVuIGl0IGFkZHMgdGhlIHNhbWUgYXNzZXJ0aW9uIHRvIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgLCBidXQgKm9ubHkqIHVuZGVyIGBDT05GSUdfTlVNQWAsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoYXQgdGhlIGV4aXN0aW5nIGJlaGF2aW9yIHVuZGVyIGAhQ09ORklHX05VTUFgIGNvdWxkIGJlIHNpZ25pZmljYW50LiBJdCB0aGVuIGRlZmluZXMgdGhlbSB0byBqdXN0IHJldHVybiBgKDApYCB3aGVuIGAhQ09ORklHX05VTUFgLiBTbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhZGRpbmcgdGhpcyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgYml0cyB1c2VkIGZvciB0aGUgbm9kZSBJRCBhcmUgZXhjbHVzaXZlbHkgc2V0LiBUaGlzIHNvdW5kcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBiaXQgY29sbGlzaW9ucyBvciBtaXNpbnRlcnByZXRhdGlvbnMuXG5cbkkgdGFrZSBhIGNsb3NlciBsb29rIGFuZCByZWFsaXNlIHRoYXQgdGhlIHBhdGNoIGNoYW5nZXMgdGhlc2UgbGluZXM6XG5cbmBgYGNcbisjaWZkZWYgQ09ORklHX05VTUFcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MsXG4rXHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tXHUwMDNlZmxhZ3MsXG4rXHRcdFx0ICAgICAgTk9ERVNfTUFTSyBcdTAwM2NcdTAwM2MgTk9ERVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXHUwMDNlZmxhZ3MpO1xuIH1cbisjZWxzZVxuKyNkZWZpbmUgcGFnZV90b19uaWQocGFnZSkgKDApXG4rI2RlZmluZSBmb2xpb19uaWQoZm9saW8pICgwKVxuKyNlbmRpZlxuYGBgXG5cbkFuZCB0aGVzZSBsaW5lczpcblxuYGBgY1xuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcbiB7XG4tXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gKGZsYWdzLmYgXHUwMDNlXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFx1MDAyNiBaT05FU19NQVNLO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2Vfem9uZW51bShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMocGFnZS1cdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4gXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tXHUwMDNlZmxhZ3MsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuIFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuYGBgXG5cbkknbSB0aGlua2luZywgXCJUaGVzZSBhcmUgcHVyZWx5IGFzc2VydGlvbnNcIiwgb3IgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIGAhQ09ORklHX05VTUFgLiBJZiBzbyB0aGV5IHdlcmUgcHJvYmFibHkgYWxyZWFkeSByZXR1cm5pbmcgMCBvciBkb2luZyBzb21ldGhpbmcgc2ltaWxhciwgb3IgZml4aW5nIGEgYnVpbGQgaXNzdWUuXCIgVGhlbiB0aGUgXCJXYWl0IGEgc2Vjb25kXCIgbW9tZW50IGNvbWVzLiBXaGF0ICpkaWQqIGBwYWdlX3RvX25pZGAgYWN0dWFsbHkgZG8gYmVmb3JlIHdoZW4gYCFDT05GSUdfTlVNQWA/IEkgbmVlZCB0byBjaGVjayB0aGUgcHJlLXBhdGNoIHZlcnNpb24gb2YgYGluY2x1ZGUvbGludXgvbW0uaGAgdG8gY29uZmlybSB0aGUgb3JpZ2luYWwgYmVoYXZpb3VyLiBUaGUgc2FtZSBnb2VzIGZvciB0aGUgYG1lbWRlc2NfbmlkYCBmdW5jdGlvbi4gSXQncyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gVG8gY29uZmlybSB0aGUgYmVoYXZpb3VyIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoZSBjb2RlIGFyb3VuZCB0aGUgYG1lbWRlc2NfbmlkYCBmdW5jdGlvbi4gTG9va3MgbGlrZSBsaW5lIDIyOTQgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDg6MDYuMzAyMTIwMjU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODU1MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWRlc2NfbmlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9MjI4Mz1zdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI4OC0jaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMjg5OmludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5MC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkxOnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTIyOTg9c3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMS1cXHRcXHRcXHQgICAgICBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMzAyOlxcdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cXHUwMDNlZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMzAzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yMzA1PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDgtXFx0XFx0XFx0ICAgICAgTk9ERVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBOT0RFU19QR1NISUZUKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwOTpcXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXFx1MDAzZWZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMxMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjA4OjA2LjM3MDk4ODY3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTkxODczOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgTGFuZHNjYXBlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBhIGNoYW5nZSBpbiB0aGUgZGVmaW5pdGlvbnMuIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgIHdlcmUgYWx3YXlzIGF2YWlsYWJsZSwgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkuIE5vdywgdGhleSdyZSBzdWRkZW5seSB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jay4gVGhhdCdzIGEgcmVkIGZsYWcg4oCTIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBub2RlIGFzc29jaWF0aW9uIGlzIGhhbmRsZWQuXG5cblRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBxdWVzdGlvbjogaWYgYENPTkZJR19OVU1BYCBpcyAqbm90KiBkZWZpbmVkIChpLmUuLCBgIUNPTkZJR19OVU1BYCksIHdoYXQgd2FzIGBtZW1kZXNjX25pZGAgZG9pbmc/IEl0IHNlZW1zIGxpa2UgdGhpcyBtaWdodCBiZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgbWVtZGVzY19uaWRgIHByb3ZpZGVzLiBMZXQncyBkZWx2ZSBpbnRvIGl0cyBkZWZpbml0aW9uIGFuZCB1bnJhdmVsIGl0cyBwdXJwb3NlIGluIHRoZSBhYnNlbmNlIG9mIE5VTUEuIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTEyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDg6MDkuNTMwMTc4NjMyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzA0NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWRlc2NfbmlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9MjI4Mz1zdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI4OC0jaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMjg5OmludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5MC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkxOnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTIyOTg9c3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMS1cXHRcXHRcXHQgICAgICBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMzAyOlxcdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cXHUwMDNlZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMzAzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yMzA1PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDgtXFx0XFx0XFx0ICAgICAgTk9ERVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBOT0RFU19QR1NISUZUKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwOTpcXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXFx1MDAzZWZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMxMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjA4OjA5LjU5MzQ5MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU1OTYyNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvbW0uaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjg4LiBUaGF0IHNob3VsZCBiZSB0aGUgYXJlYSBkZWFsaW5nIHdpdGggW2luc2VydCB5b3VyIGFzc3VtcHRpb24gb2Ygd2hhdCBsaW5lIDIyODggZGVhbHMgd2l0aCwgZS5nLiwgXCJ0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gZm9yIHRoZSBgc3RydWN0IHZtX2FyZWFfc3RydWN0YCBvciBpdHMgcmVsYXRlZCBmdW5jdGlvbnNcIl0uIEkgYW50aWNpcGF0ZSB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGxvdy1sZXZlbCBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyBjZW50cmFsIHRvIHRoZSBvcGVyYXRpb24gSSdtIGludmVzdGlnYXRpbmcuIEkgZXhwZWN0IGl0IHRvIGhhdmUgdGhlIGNydWNpYWwgcGllY2VzIEknbSBsb29raW5nIGZvciAtIHdoZXRoZXIgaXQgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFwcywgcGFnZSB0YWJsZXMgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEknbSBleHBlY3RpbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzIHJlZ2FyZGluZyB3aGF0IEkgaGF2ZSBwcmV2aW91c2x5IGJlZW4gZXhhbWluaW5nLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCByaWdodCBkb3duIHRvIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjowODoxMi42NDk0NTU1MDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODA6XFx0ICogV2Ugb25seSBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBmb3IgdHdvIGNvbWJpbmFibGVcXG4yMjgxOlxcdCAqIHBhZ2VzIGluIGEgem9uZS5cXG4yMjgyOlxcdCAqL1xcbjIyODM6XFx0c3RhdGljIGlubGluZSBpbnQgcGFnZV96b25lX2lkKHN0cnVjdCBwYWdlICpwYWdlKVxcbjIyODQ6XFx0e1xcbjIyODU6XFx0XFx0cmV0dXJuIChwYWdlLVxcdTAwM2VmbGFncy5mIFxcdTAwM2VcXHUwMDNlIFpPTkVJRF9QR1NISUZUKSBcXHUwMDI2IFpPTkVJRF9NQVNLO1xcbjIyODY6XFx0fVxcbjIyODc6XFx0XFxuMjI4ODpcXHQjaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xcbjIyODk6XFx0aW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xcbjIyOTA6XFx0I2Vsc2VcXG4yMjkxOlxcdHN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuMjI5MjpcXHR7XFxuMjI5MzpcXHRcXHRyZXR1cm4gKG1kZi5mIFxcdTAwM2VcXHUwMDNlIE5PREVTX1BHU0hJRlQpIFxcdTAwMjYgTk9ERVNfTUFTSztcXG4yMjk0OlxcdH1cXG4yMjk1OlxcdCNlbmRpZlxcbjIyOTY6XFx0XFxuMjI5NzpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG4yMjk4OlxcdHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbjIyOTk6XFx0e1xcbjIzMDA6XFx0XFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLVxcdTAwM2VmbGFncyxcXG4yMzAxOlxcdFxcdFxcdFxcdCAgICAgIE5PREVTX01BU0sgXFx1MDAzY1xcdTAwM2MgTk9ERVNfUEdTSElGVCk7XFxuMjMwMjpcXHRcXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXFx1MDAzZWZsYWdzKTtcXG4yMzAzOlxcdH1cXG4yMzA0OlxcdFxcbjIzMDU6XFx0c3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMjMwNjpcXHR7XFxuMjMwNzpcXHRcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZm9saW8tXFx1MDAzZWZsYWdzLFxcbjIzMDg6XFx0XFx0XFx0XFx0ICAgICAgTk9ERVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBOT0RFU19QR1NISUZUKTtcXG4yMzA5OlxcdFxcdHJldHVybiBtZW1kZXNjX25pZChmb2xpby1cXHUwMDNlZmxhZ3MpO1xcbjIzMTA6XFx0fVxcbjIzMTE6XFx0I2Vsc2VcXG4yMzEyOlxcdCNkZWZpbmUgcGFnZV90b19uaWQocGFnZSkgKDApXFxuMjMxMzpcXHQjZGVmaW5lIGZvbGlvX25pZChmb2xpbykgKDApXFxuMjMxNDpcXHQjZW5kaWZcXG4yMzE1OlxcdFxcbjIzMTY6XFx0I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbjIzMTc6XFx0LyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXFxuMjMxODpcXHQjZGVmaW5lIFBBR0VfQUNDRVNTX1RJTUVfTUlOX0JJVFNcXHQxMlxcbjIzMTk6XFx0I2lmIExBU1RfQ1BVUElEX1NISUZUIFxcdTAwM2MgUEFHRV9BQ0NFU1NfVElNRV9NSU5fQklUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjowODoxMi42NDk3NTEzMjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODExOTMyMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIgYXQgZmlyc3QgZ2xhbmNlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGEgZGVlcGVyIGNoYW5nZSwgYWZmZWN0aW5nIGhvdyBtZW1vcnkgaXMgbWFuYWdlZC4gQnV0IGFmdGVyIGEgc2Vjb25kIGxvb2ssIGFuZCBjYXJlZnVsbHkgdHJhY2luZyB0aGUgbG9naWMsIEkgc2VlIGl0J3MgcHVyZWx5IGFib3V0IGFzc2VydGlvbnMgYW5kIG1hY3JvIGRlZmluaXRpb25zLCByYXRoZXIgdGhhbiBhbnkgZnVuY3Rpb25hbCBhbHRlcmF0aW9ucy5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIHNoaWZ0aW5nIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGZyb20gYG1lbWRlc2Nfem9uZW51bWAgdG8gYHBhZ2Vfem9uZW51bWAgYW5kIGBmb2xpb196b25lbnVtYC4gTm8gcHJvYmxlbSB0aGVyZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGhhbmRsaW5nIG9mIGBwYWdlX3RvX25pZGAgYW5kIGBmb2xpb19uaWRgIHVuZGVyIGBDT05GSUdfTlVNQWAgYW5kIHRoZSBpbXBsaWNhdGlvbiB3aGVuIGAhQ09ORklHX05VTUFgLiBJdCBpbnRyb2R1Y2VzIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIHRvIHRob3NlIGZ1bmN0aW9ucyB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZCwgc2V0dGluZyB0aGVtIHRvIGAoMClgIG90aGVyd2lzZS5cblxuTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IGFzIEkgcmV2aWV3ZWQgdGhlIG9yaWdpbmFsIGRlZmluaXRpb25zLCBJIHJlYWxpemVkIHRoZXJlJ3Mgbm8gYWx0ZXJhdGlvbiBpbiBiZWhhdmlvci4gUHJldmlvdXNseSwgYHBhZ2VfdG9fbmlkYCB1bHRpbWF0ZWx5IGNhbGxlZCBgbWVtZGVzY19uaWRgLCB3aGljaCBpbiB0dXJuLCB1c2VkIGJpdCBzaGlmdGluZyBiYXNlZCBvbiBgTk9ERVNfUEdTSElGVGAgYW5kIGBOT0RFU19NQVNLYC4gTm93LCB3aGVuIGAhQ09ORklHX05VTUFgLCB0aGUgYHBhZ2VfdG9fbmlkYCBmdW5jdGlvbiByZXR1cm5zICgwKSBkaXJlY3RseS4gQ29uc2lkZXJpbmcgYE5PREVTX1BHU0hJRlRgIGFuZCBgTk9ERVNfTUFTS2AgYXJlIDAgaW4gdGhhdCBzY2VuYXJpbywgdGhlIHJlc3VsdGluZyB2YWx1ZSB3b3VsZCBoYXZlIGJlZW4gemVybyBhbnl3YXlzLiBUaGlzIGlzIGEgbWFjcm8gb3B0aW1pemF0aW9uLlxuXG5KdXN0IHRvIGJlIGNlcnRhaW4sIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGhlYWRlciBmaWxlIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCB0byBtYWtlIHN1cmUgYWxsIHJlbGF0ZWQgbWFjcm9zIGFyZSBiZWluZyBoYW5kbGVkIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDg6MTguNDYxNjg1Mjk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNzA6XFx0I2RlZmluZSBTRUNUSU9OU19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfV0lEVEgpIC0gMSlcXG4xMjcxOlxcdCNkZWZpbmUgTEFTVF9DUFVQSURfTUFTS1xcdCgoMVVMIFxcdTAwM2NcXHUwMDNjIExBU1RfQ1BVUElEX1NISUZUKSAtIDEpXFxuMTI3MjpcXHQjZGVmaW5lIEtBU0FOX1RBR19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXFxuMTI3MzpcXHQjZGVmaW5lIFpPTkVJRF9NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXFxuMTI3NDpcXHRcXG4xMjc1OlxcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcXG4xMjc2OlxcdHtcXG4xMjc3OlxcdFxcdHJldHVybiAoZmxhZ3MuZiBcXHUwMDNlXFx1MDAzZSBaT05FU19QR1NISUZUKSBcXHUwMDI2IFpPTkVTX01BU0s7XFxuMTI3ODpcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHBhZ2UtXFx1MDAzZWZsYWdzLCBaT05FU19NQVNLIFxcdTAwM2NcXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xcbjEyODM6XFx0XFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLVxcdTAwM2VmbGFncyk7XFxuMTI4NDpcXHR9XFxuMTI4NTpcXHRcXG4xMjg2OlxcdHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjEyODc6XFx0e1xcbjEyODg6XFx0XFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZvbGlvLVxcdTAwM2VmbGFncywgWk9ORVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBaT05FU19QR1NISUZUKTtcXG4xMjg5OlxcdFxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4xMjkwOlxcdH1cXG4xMjkxOlxcdFxcbjEyOTI6XFx0I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbjEyOTM6XFx0c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UobWVtZGVzY19mbGFnc190IG1kZilcXG4xMjk0OlxcdHtcXG4xMjk1OlxcdFxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0obWRmKSA9PSBaT05FX0RFVklDRTtcXG4xMjk2OlxcdH1cXG4xMjk3OlxcdFxcbjEyOTg6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuMTI5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjA4OjE4LjQ2MTg1MDg5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkyNzQ1OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGFsbCBpdCdzIGRvaW5nIGlzIGFkZGluZyBvciByZWxvY2F0aW5nIHRoZSBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBtYWNybyBhbmQgdGhlbiBjaGFuZ2luZyB0aGUgY2FsbHMgdG8gYHBhZ2VfdG9fbmlkYCBvciBgZm9saW9fbmlkYCB0byBqdXN0IHJldHVybiBgKDApYCB3aGVuIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIE5VTUEgZW5hYmxlZCDigJMgd2hpY2gsIGluIG15IGV4cGVyaWVuY2UsIGlzIGEgZmFpcmx5IGNvbW1vbiBhbmQgZXhwZWN0ZWQgb3B0aW1pemF0aW9uIGluIHRoYXQgc2NlbmFyaW8uXG5cbkhvbmVzdGx5LCB0aGlzIGlzbid0IGFueXRoaW5nIEknZCBjb25zaWRlciBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBXZSdyZSBub3QgdG91Y2hpbmcgY29yZSBhbGdvcml0aG1zIG9yIGFkZGluZyBuZXcgZmVhdHVyZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBleHBsb2l0YWJsZSBmdXp6aW5nIHBvaW50cy4gSXQncyByZWFsbHkganVzdCBhYm91dCB0aGUgYXNzZXJ0aW9ucyBhbmQsIGF0IG1vc3QsIHNvbWUgdmVyeSBtaW5vciBtYWNybyBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHRvdGFsbHkgZGVwZW5kZW50IG9uIHRoZSBDT05GSUdfTlVNQSBzZXR0aW5nLlxuXG5TbywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLCB0aGVyZSBpcyBzaW1wbHkgbm90aGluZyB3b3J0aHdoaWxlIHRvIGZ1enogaGVyZSBhbmQgaXQgaXMgbm90IGEgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGV4cGxvcmF0aW9uLiBJJ2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5NywiT3V0cHV0VG9rZW5zIjo4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MDg6MjIuNjU0NTk5NDk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb3ZlcyBhbmQgYWRkcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgYXNzZXJ0aW9ucywgYW5kIG9wdGltaXplcyBwYWdlX3RvX25pZC9mb2xpb19uaWQgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiAhQ09ORklHX05VTUEuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgcmVxdWlyZXMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW92ZXMgYW5kIGFkZHMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIGFzc2VydGlvbnMsIGFuZCBvcHRpbWl6ZXMgcGFnZV90b19uaWQvZm9saW9fbmlkIHRvIHJldHVybiAwIGRpcmVjdGx5IHdoZW4gIUNPTkZJR19OVU1BLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyB0aGF0IHJlcXVpcmVzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowk52t8[1] Phase: Running StartedAt: 2026-06-25 06:09:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk52t8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-25 06:09:02 +0000 UTC FinishedAt: 2026-06-25 06:09:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}