Name: series-workflowxhjlc Phase: Failed StartedAt: 2026-08-27 08:57:42 +0000 UTC FinishedAt: 2026-08-27 09:13:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhjlc[0] Phase: Succeeded StartedAt: 2026-08-27 08:57:42 +0000 UTC FinishedAt: 2026-08-27 09:13:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhjlc[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 08:57:42 +0000 UTC FinishedAt: 2026-08-27 09:13: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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgZGVidWdmcyBlbnRyeSB0byBxdWVyeSBhbmQgcHJpbnQgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZS4gSXQgaXMgYSBkaWFnbm9zdGljL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBkcml2ZXImIzM5O3MgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWU1ZGI1YmQxZDNjY2VjNDk4YmEyMjg0NzJlNzFiNDY4YWFiNGRiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA5OjEyOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oXG5pbmRleCAwZWRlZGE1NjllOWE1Li5iZjBmMTA1Yzc4NmU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaFxuQEAgLTE0ODMsNiAmIzQzOzE0ODMsMTc5IEBAIGVudW0ge1xuIFx0TVRfTklDX0NBUF9FTUxfQ0FQID0gMHgyMixcbiB9O1xuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQkFTSUMgPSAwLFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkgPSAxLFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19TVEEgPSAyLFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19CVUdfUkVQT1JUID0gMyxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfVFhfU1RBVFMgPSA0LFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19BTExfU1RBVFMgPSA1LFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19FTUxfU1RBVFMgPSA2LFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19SRUdVTEFSX1NUQVRTID0gNyxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQlNTX0xJTktfUVVBTElUWSA9IDgsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX01MX0NITkxfQ09ORCA9IDksXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgPSAxMCxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19MQVlFUl9TVEFUUyA9IDEyOCxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfUFBEVV9MQVRFTkNZID0gMTI5LFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19DVVJSRU5UX1RYX1JBVEUgPSAxMzAsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9UWF9CSVRSQVRFX01PTklUT1IgPSAxMzEsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0dFVF9QUkVESUNUX1RYX0JJVFJBVEUgPSAxMzIsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9BVFBTX1RZUEVfUkFURV9NT0RFID0gMTMzLFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19TRVRfQkVBQ09OX1JFUE9SVCA9IDEzNCxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQlNTX0NVUlJFTlRfVFhfUkFURSA9IDEzNSxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfR0VUX0JTU19QUkVESUNUX1RYX0JJVFJBVEUgPSAxMzYsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX01BWF9OVU1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gbXQ3OTI1X21pYl9jb3VudGVyIHtcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfRkNTX0VSUiA9IDAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1cgPSAxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9NUERVID0gMixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQgPSAzLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9UT1RBTF9CWVRFID0gNCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfVkFMSURfQU1QRFVfU0YgPSA1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9WQUxJRF9CWVRFID0gNixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQ0hBTk5FTF9JRExFID0gNyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfVkVDX0RST1AgPSA4LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9ERUxJTUlURVJfRkFJTCA9IDksXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1ZFQ19NSVNNQVRDSCA9IDEwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSA9IDExLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSA9IDEyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUUgPSAxMyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FID0gMTQsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1BGX0RST1AgPSAxNSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfTEVOX01JU01BVENIID0gMTYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1BfQ0NBX1RJTUUgPSAxNyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19DQ0FfVElNRSA9IDE4LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUUgPSAxOSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUF9FRF9USU1FID0gMjAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JDTl9UWCA9IDIxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18yME1IWiA9IDIyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV180ME1IWiA9IDIzLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV184ME1IWiA9IDI0LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18xNjBNSFogPSAyNSxcbiYjNDM7XHRVTklfQ01EX1JNQUNfQ05UX09CU1NfQUlSVElNRSA9IDI2LFxuJiM0MztcdFVOSV9DTURfUk1BQ19DTlRfTk9OV0lGSV9BSVJUSU1FID0gMjcsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0RVUl9DTlQgPSAyOCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfRFVSX0NOVCA9IDI5LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CQV9DTlQgPSAzMCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfTUFDMlBIWV9UWF9USU1FID0gMzEsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX09VVF9PRl9SQU5HRV9DT1VOVCA9IDMyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9JQkZfVFggPSAzMyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfRUJGX1RYID0gMzQsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX01VQkZfVFggPSAzNSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfQkZfVkhURkJLID0gMzYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0hURkJLID0gMzcsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0hFRkJLID0gMzgsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JGRUVfVFhGQktfQkZQT0xMX1RSSSA9IDM5LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX1RSSSA9IDQwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1JYX0ZCS0NRSSA9IDQxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1JYX05EUCA9IDQyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9CRl9JQkZfVVBUID0gNDMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0VCRl9VUFQgPSA0NCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQkZFRV9TUF9BQk9SVCA9IDQ1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1RCX0xFTl9FUlIgPSA0NixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19NVVRFID0gNDcsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JGRUVfVE1BQ19BQk9SVCA9IDQ4LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX0NQTCA9IDQ5LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX0NPQU5UX0JMS1RYID0gNTAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JGRUVfRkJLX1NFRyA9IDUxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9OQVZfVElNRSA9IDUyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9BQk9SVF9DTlQxID0gNTMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDAgPSA1NCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMyA9IDU1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9BQk9SVF9DTlQyID0gNTYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVCA9IDU3LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MxX1JUU19UWF9DTlQgPSA1OCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMl9SVFNfVFhfQ05UID0gNTksXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzNfUlRTX1RYX0NOVCA9IDYwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1JUU19SRVRSWSA9IDYxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MxX1JUU19SRVRSWSA9IDYyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MyX1JUU19SRVRSWSA9IDYzLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MzX1JUU19SRVRSWSA9IDY0LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0JBX01JU1MgPSA2NSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMV9CQV9NSVNTID0gNjYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfQkFfTUlTUyA9IDY3LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MzX0JBX01JU1MgPSA2OCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCA9IDY5LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MxX0FDS19GQUlMID0gNzAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfQUNLX0ZBSUwgPSA3MSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTM19BQ0tfRkFJTCA9IDcyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZID0gNzMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzFfRlJBTUVfUkVUUlkgPSA3NCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMl9GUkFNRV9SRVRSWSA9IDc1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MzX0ZSQU1FX1JFVFJZID0gNzYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMiA9IDc3LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MxX0ZSQU1FX1JFVFJZXzIgPSA3OCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMl9GUkFNRV9SRVRSWV8yID0gNzksXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzNfRlJBTUVfUkVUUllfMiA9IDgwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9BMV9TRUFSQ0ggPSA4MSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfRFJPUF9NUERVID0gODIsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX1VOV0FOVEVEID0gODMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ZDU19PSyA9IDg0LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TVV9UWF9PSyA9IDg1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9GVUxMX0JXID0gODYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0FVVE9fQlcgPSA4NyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQ0NBX1NBTVBMRV9JRExFID0gODgsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9TQU1QTEVfQUNUSVZFID0gODksXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9USU1FID0gOTAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfMjBCV19DQ0FfVElNRSA9IDkxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TXzQwQldfQ0NBX1RJTUUgPSA5MixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU184MEJXX0NDQV9USU1FID0gOTMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfMTYwQldfQ0NBX1RJTUUgPSA5NCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18wX0VEX1RJTUUgPSA5NSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xX0VEX1RJTUUgPSA5NixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18yX0VEX1RJTUUgPSA5NyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18zX0VEX1RJTUUgPSA5OCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV180X0VEX1RJTUUgPSA5OSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV181X0VEX1RJTUUgPSAxMDAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfNl9FRF9USU1FID0gMTAxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzdfRURfVElNRSA9IDEwMixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV184X0VEX1RJTUUgPSAxMDMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfOV9FRF9USU1FID0gMTA0LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEwX0VEX1RJTUUgPSAxMDUsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTFfRURfVElNRSA9IDEwNixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xMl9FRF9USU1FID0gMTA3LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEzX0VEX1RJTUUgPSAxMDgsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTRfRURfVElNRSA9IDEwOSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xNV9FRF9USU1FID0gMTEwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18zMjBNSFogPSAxMTEsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0RETE1UX1JORzAgPSAxMTIsIC8qIFJuZzB+Um5nNCAxMTJ+MTE2ICovXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMyA9IDExNywgLyogMTE3fjEyMCAqL1xuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYID0gMTIxLCAvKiAxMjF+MTI0ICovXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfVFhfREFUQSA9IDEyNSwgLyogMTI1fjEyOCAqL1xuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYX0JZVEUgPSAxMjksIC8qIDEyOX4xMzIgKi9cbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfT0tfQlNTMCA9IDEzMywgLyogMTMzfjEzNiAqL1xuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9CWVRFX0JTUzAgPSAxMzcsIC8qIDEzN34xNDAgKi9cbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfREFUQV9CU1MwID0gMTQxLCAvKiAxNDF+MTQ0ICovXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX01CU1MwX1RYX09LID0gMTQ1LCAvKiAxNDV+MTYwICovXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX01CU1MwX1RYX0JZVEUgPSAxNjEsIC8qIDE2MX4xNzYgKi9cbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfT0tfTUJTUzAgPSAxNzcsIC8qIDE3N34xOTIgKi9cbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfQllURV9NQlNTMCA9IDE5MywgLyogMTkzfjIwOCAqL1xuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9BTVBEVSA9IDIwOSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSA9IDIxMCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfQUNLRUQgPSAyMTEsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX01BWF9OVU1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gRU5VTV9VTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBRyB7XG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQkFTSUMgPSAwLFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEsXG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfU1RBID0gMixcbiYjNDM7XHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CVUdfUkVQT1JUID0gMyxcbiYjNDM7XHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19FTUxfU1RBVFMgPSA2LFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1JFR1VMQVJfU1RBVFMgPSA3LFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JTU19MSU5LX1FVQUxJVFkgPSA4LFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0dFVF9NTF9DSE5MX0NPTkQgPSA5LFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1NUQVRfV1RCTCA9IDEwLFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfTEFZRVJfU1RBVFMgPSAweDgwLFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1BQRFVfTEFURU5DWSxcbiYjNDM7XHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19DVVJSRU5UX1RYX1JBVEUsXG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQkVBQ09OX1JFUE9SVCA9IDB4ODYsXG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX0NVUlJFTlRfVFhfUkFURSA9IDB4ODcsXG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX1BSRURfVFhfQklUUkFURSA9IDB4ODgsXG4mIzQzO307XG4mIzQzO1xuICNkZWZpbmUgVU5JX1dPV19ERVRFQ1RfVFlQRV9NQUdJQ1x0XHRCSVQoMClcbiAjZGVmaW5lIFVOSV9XT1dfREVURUNUX1RZUEVfQU5ZXHRcdFx0QklUKDEpXG4gI2RlZmluZSBVTklfV09XX0RFVEVDVF9UWVBFX0RJU0NPTk5FQ1RcdFx0QklUKDIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVxuaW5kZXggZjlkY2MwYmJhMzkzYy4uMzg2M2E4OWI4OTc0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVxuQEAgLTQsNyAmIzQzOzQsNyBAQCBvYmotJChDT05GSUdfTVQ3OTI1X0NPTU1PTikgJiM0Mzs9IG10NzkyNS1jb21tb24ub1xuIG9iai0kKENPTkZJR19NVDc5MjVFKSAmIzQzOz0gbXQ3OTI1ZS5vXG4gb2JqLSQoQ09ORklHX01UNzkyNVUpICYjNDM7PSBtdDc5MjV1Lm9cbiBcbi1tdDc5MjUtY29tbW9uLXkgOj0gbWFjLm8gbWN1Lm8gcmVnZC5vIG1haW4ubyBpbml0Lm8gZGVidWdmcy5vIG5hbi5vXG4mIzQzO210NzkyNS1jb21tb24teSA6PSBtYWMubyBtY3UubyByZWdkLm8gbWFpbi5vIGluaXQubyBkZWJ1Z2ZzLm8gbmFuLm8gc3RhdHMub1xuIG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgJiM0Mzs9IHRlc3Rtb2RlLm9cbiBtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3Uub1xuIG10NzkyNXUteSA6PSB1c2Iub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xuaW5kZXggZDAxZmY0OWRlNDdhZi4uN2E0MGQ1YWM0N2RhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG5AQCAtMSw4ICYjNDM7MSwxMSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjMgTWVkaWFUZWsgSW5jLiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDttdDc5MjUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O21jdS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N0YXRzLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50XG4gbXQ3OTI1X3JlZ19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbkBAIC0yODYsNiAmIzQzOzI4OSwzNDYgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIFxuIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgXCYjMzQ7JWxsZFxcblwmIzM0Oyk7XG4gXG4mIzQzO3N0YXRpYyBjb25zdCB1MzIgc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzW10gPSB7XG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ZDU19FUlIsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1csXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX01QRFUsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0FNUERVX1JYX0NPVU5ULFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9QRl9EUk9QLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0NIQU5ORUxfSURMRSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUUsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9QX0NDQV9USU1FLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TX0NDQV9USU1FLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9QX0VEX1RJTUUsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JDTl9UWCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfVFhfQldfNDBNSFosXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18xNjBNSFosXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfQkFfTUlTUyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0FDS19GQUlMLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9BTVBEVSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfQUNLRUQsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBEdW1wIHRoZSB3aG9sZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgYW5kIG1hcmsgdGhlIGVudHJ5IGN1cnJlbnRseSBpbiB1c2VcbiYjNDM7ICogd2l0aCBcJiMzNDstLVx1MDAzZVwmIzM0O1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7bXQ3OTI1X2R1bXBfYXV0b19yYXRlX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqcyxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3cilcbiYjNDM7e1xuJiM0MztcdHU4IGZjYXAgPSB3ci1cdTAwM2VmY2FwO1xuJiM0MztcdHU4IHJhdGVfaWR4ID0gd3ItXHUwMDNlcmF0ZV9pZHg7XG4mIzQzO1x0dTggY2JybiA9IHdyLVx1MDAzZWNicm47XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIEN1ciBSYXRlIEluZGV4ID0gJXVcXG5cJiMzNDssIFwmIzM0OyBcJiMzNDssIHJhdGVfaWR4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3OTI1X0FVVE9fUkFURV9OVU07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MTYgcmF0ZV9jb2RlID0gbGUxNl90b19jcHUod3ItXHUwMDNlcmF0ZV9jb2RlW2ldKTtcbiYjNDM7XHRcdHU4IHR4bW9kZSA9IE1UNzkyNV9IV19SQVRFX1RPX01PREUocmF0ZV9jb2RlKTtcbiYjNDM7XHRcdHU4IHJhdGUgPSBNVDc5MjVfSFdfUkFURV9UT19NQ1MocmF0ZV9jb2RlKTtcbiYjNDM7XHRcdHU4IG5zdHMgPSBNVDc5MjVfSFdfUkFURV9UT19OU1MocmF0ZV9jb2RlKSAmIzQzOyAxO1xuJiM0MztcdFx0dTggc3RiYyA9IE1UNzkyNV9IV19SQVRFX1RPX1NUQkMocmF0ZV9jb2RlKTtcbiYjNDM7XHRcdHU4IGRjbSA9IE1UNzkyNV9IV19SQVRFX1RPX0RDTShyYXRlX2NvZGUpO1xuJiM0MztcdFx0dTggZXJzdTEwNnQgPSBNVDc5MjVfSFdfUkFURV9UT18xMDZUKHJhdGVfY29kZSk7XG4mIzQzO1x0XHR1OCBzZ2kgPSBtdDc5MjVfd3RibF9nZXRfc2dpKHdyLCB0eG1vZGUsIGZjYXApO1xuJiM0MztcdFx0dTggbGRwYyA9IG10NzkyNV93dGJsX2dldF9sZHBjKHdyLCB0eG1vZGUpO1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbW9kZV9zdHIgPSBcJiMzNDtOL0FcJiMzNDs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRjbSlcbiYjNDM7XHRcdFx0cmF0ZSA9IE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJzdTEwNnQpXG4mIzQzO1x0XHRcdHJhdGUgPSBNVDc5MjVfSFdfUkFURV9VTk1BU0tfMTA2VChyYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHhtb2RlIFx1MDAzYyBBUlJBWV9TSVpFKG10NzkyNV90eF9tb2RlX3N0cikpXG4mIzQzO1x0XHRcdG1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07XG4mIzQzO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDtSYXRlIGluZGV4WyVkXSAgICAlc1wmIzM0OywgaSxcbiYjNDM7XHRcdFx0ICAgcmF0ZV9pZHggPT0gaSA/IFwmIzM0Oy0tXHUwMDNlIFwmIzM0OyA6IFwmIzM0OyAgICBcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdC8qIHJhdGUvTUNTIGZpZWxkICovXG4mIzQzO1x0XHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxuJiM0MztcdFx0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzLCBcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltyYXRlIFx1MDAyNiAweDNdKTtcbiYjNDM7XHRcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXG4mIzQzO1x0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0OywgbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIocmF0ZSkpO1xuJiM0MztcdFx0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHxcbiYjNDM7XHRcdFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YpXG4mIzQzO1x0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7TUNTJWQsIFwmIzM0OywgcmF0ZSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMlZF9NQ1MlZCwgXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0YmMgPyBcJiMzNDtOU1RTXCYjMzQ7IDogXCYjMzQ7TlNTXCYjMzQ7LCBuc3RzLCByYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBiYW5kd2lkdGg6IG1pcnJvciB0aGUgQ0NLL09GRE0gLVx1MDAzZSBCVzIwIGFuZCBjYnJuIGhhbmRsaW5nICovXG4mIzQzO1x0XHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLIHx8XG4mIzQzO1x0XHQgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSlcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbMF0pO1xuJiM0MztcdFx0ZWxzZSBpZiAoaSBcdTAwM2UgY2JybilcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGZjYXAgXHUwMDNjIDUgP1xuJiM0MztcdFx0XHRcdCAgIChmY2FwIFx1MDAzZSBNVDc5MjVfQldfMjAgP1xuJiM0MztcdFx0XHRcdCAgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcCAtIDFdIDpcbiYjNDM7XHRcdFx0XHQgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXBdKSA6XG4mIzQzO1x0XHRcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGZjYXAgXHUwMDNjIDUgPyBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0gOlxuJiM0MztcdFx0XHRcdCAgIG10NzkyNV90eF9yYXRlX2J3X3N0cls1XSk7XG4mIzQzO1xuJiM0MztcdFx0LyogR0kgLyBwcmVhbWJsZSAqL1xuJiM0MztcdFx0aWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSylcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LCByYXRlIFx1MDAzYyA0ID8gXCYjMzQ7TFBcJiMzNDsgOiBcJiMzNDtTUFwmIzM0Oyk7XG4mIzQzO1x0XHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuJiM0MztcdFx0XHQ7IC8qIE9GRE0gaGFzIG5vIEdJL3ByZWFtYmxlIHRvIHByaW50ICovXG4mIzQzO1x0XHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCB8fFxuJiM0MztcdFx0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiB8fFxuJiM0MztcdFx0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfVkhUIHx8XG4mIzQzO1x0XHRcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIpXG4mIzQzO1x0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0Oywgc2dpID09IDAgPyBcJiMzNDtMR0lcJiMzNDsgOiBcJiMzNDtTR0lcJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzLCBcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgc2dpID09IDAgPyBcJiMzNDtTR0lcJiMzNDsgOlxuJiM0MztcdFx0XHRcdCAgIChzZ2kgPT0gMSA/IFwmIzM0O01HSVwmIzM0OyA6IFwmIzM0O0xHSVwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRcdC8qIG1vZGUsIERDTSwgMTA2dCwgU1RCQywgY29kaW5nICovXG4mIzQzO1x0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzJXMlcyVzJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIG1vZGVfc3RyLFxuJiM0MztcdFx0XHQgICBkY20gPyBcJiMzNDssIERDTVwmIzM0OyA6IFwmIzM0O1wmIzM0OywgZXJzdTEwNnQgPyBcJiMzNDssIDEwNnRcJiMzNDsgOiBcJiMzNDtcJiMzNDssXG4mIzQzO1x0XHRcdCAgIHN0YmMgPyBcJiMzNDssIFNUQkMsIFwmIzM0OyA6IFwmIzM0OywgXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAobGRwYyA9PSAwIHx8XG4mIzQzO1x0XHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHxcbiYjNDM7XHRcdFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pID9cbiYjNDM7XHRcdFx0ICAgXCYjMzQ7QkNDXCYjMzQ7IDogXCYjMzQ7TERQQ1wmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG10NzkyeF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzOCByc3NpID0gMDtcbiYjNDM7XHR1OCBiYW5kX2lkeCA9IDA7XG4mIzQzO1x0Ym9vbCB3dGJsX3JhdGVfdmFsaWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIHN0YXRzX3ZhbHVlID0gMDtcbiYjNDM7XHR1MzIgdHhfbGlua19zcGVlZF9rYnBzID0gMDtcbiYjNDM7XHR1NjQgdHhfdG90YWwgPSAwO1xuJiM0MztcdHU2NCB0eF9mYWlsID0gMDtcbiYjNDM7XHR1NjQgdHhfcGVyID0gMDtcbiYjNDM7XHR1MzIgdHhfcGVyX3JlbSA9IDA7XG4mIzQzO1x0LyogVU5JX0NNRF9NSUJfREFUQSAqL1xuJiM0MztcdHU2NCBtaWJfdmFsdWVzW0FSUkFZX1NJWkUoc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzKV07XG4mIzQzO1x0c3RydWN0IG10NzkyeF9kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShzLVx1MDAzZXByaXZhdGUpO1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHd0YmxfcmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyAqc3RhdHMgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRiYW5kX2lkeCA9IGRldi1cdTAwM2VtcGh5LmJhbmRfaWR4O1xuJiM0MztcbiYjNDM7XHQgc3RhdHMgPSBremFsbG9jKHNpemVvZigqc3RhdHMpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXN0YXRzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdC8qIEdldCBTVEFfU1RBVFMgKi9cbiYjNDM7XHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuJiM0MztcdHJldCA9IG10NzkyeF9tY3VfZ2V0X3N0YXQoZGV2LCBzdGF0cyk7XG4mIzQzO1x0bXQ3OTJ4X211dGV4X3JlbGVhc2UoZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEdldCBNSUJfU1RBVFMgKi9cbiYjNDM7XHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuJiM0MztcdHJldCA9IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKGRldiwgYmFuZF9pZHgsIHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHQgICAgICBBUlJBWV9TSVpFKHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyksIG1pYl92YWx1ZXMpO1xuJiM0MztcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBHZXQgTGlua19TcGVlZCBhbmQgUlNTSSAqL1xuJiM0MztcdG10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7XG4mIzQzO1x0cmV0ID0gbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5KGRldiwgc3RhdHMtXHUwMDNlYnNzX2lkeCwgXHUwMDI2cnNzaSwgXHUwMDI2dHhfbGlua19zcGVlZF9rYnBzKTtcbiYjNDM7XHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogR2V0IHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgKGJlc3QgZWZmb3J0OyBkbyBub3QgYWJvcnQgdGhlXG4mIzQzO1x0ICogd2hvbGUgc3RhdHMgZHVtcCBpZiB0aGUgV1RCTCBxdWVyeSBpcyBub3QgYXZhaWxhYmxlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuJiM0MztcdGlmICghbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlKGRldiwgc3RhdHMtXHUwMDNld3RibF9pZHgsIFx1MDAyNnd0YmxfcmF0ZSkpXG4mIzQzO1x0XHR3dGJsX3JhdGVfdmFsaWQgPSB0cnVlO1xuJiM0MztcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XG4mIzQzO1xuJiM0MztcdC8qIFByaW50IFNUQV9TVEFUUyBpbmZvICovXG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDsoU1RBKSBjb25uZWN0ZWQgQVAgTUFDIEFkZHJlc3MgPSAlcE1cXG5cJiMzNDssIHN0YXRzLVx1MDAzZW1hY19hZGRyKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBCc3NJZHggPSBbJXVdXFxuXCYjMzQ7LCBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2Vic3NfaWR4KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBTdGFSZWNJZHggPSBbJXVdXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHMtXHUwMDNlc3RhX2lkeCk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUlNTSSA9ICVkXFxuXCYjMzQ7LCBcJiMzNDsgXCYjMzQ7LCByc3NpKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBMaW5rX1NwZWVkID0gJXUgKGtiaXQvcylcXG5cJiMzNDssIFwmIzM0OyBcJiMzNDssIHR4X2xpbmtfc3BlZWRfa2Jwcyk7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIHRlbXBlcmF0dXJlID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2V0ZW1wZXJhdHVyZSk7XG4mIzQzO1xuJiM0MztcdHN0YXRzX3ZhbHVlID0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHJhbnNtaXRfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHJhbnNtaXRfZmFpbF9jb3VudCk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgVHggc3VjY2VzcyA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHNfdmFsdWUpO1xuJiM0MztcbiYjNDM7XHRzdGF0c192YWx1ZSA9IGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZXR4X2ZhaWxfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHhfbGlmZV90aW1lb3V0X2NvdW50KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBUeCBmYWlsIHRvIFJjdiBBQ0sgYWZ0ZXIgcmV0cnkgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzX3ZhbHVlKTtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggTXBkdSA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5yeF9tcGR1X2NudCkpO1xuJiM0MztcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBSeCBGY3MgRXJyb3IgPSAldSAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2VtaWJbYmFuZF9pZHhdLmZjc19lcnJvcikpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFJ4IEZJRk8gZnVsbCA9ICV1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0ucnhfZmlmb19mdWxsKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU07IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgVFJYX0FHR19SQU5HRVslZF0gPSAldSAoUFBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIFwmIzM0OyBcJiMzNDssIGksIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0udHhfcmFuZ2VfYW1wZHVfY250W2ldKSk7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCA9ICV1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0uYW1wZHVfdHhfc2ZfY250KSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgTVBEVXMgaW4gQU1QRFVzIHRyYW5zbWl0dGVkIHdpdGggQUNLIHJlcGx5ID0gJXUgKE1QRFUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5hbXBkdV90eF9hY2tfc2ZfY250KSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgcmF0ZTFfdHhfY250ID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2VyYXRlMV90eF9jbnQpKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICByYXRlMV9mYWlsX2NudCA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlcmF0ZTFfZmFpbF9jbnQpKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICB0cmFpbl91cCA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbGUxNl90b19jcHUoc3RhdHMtXHUwMDNldHJhaW5fdXApKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICB0cmFpbl9kb3duID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBsZTE2X3RvX2NwdShzdGF0cy1cdTAwM2V0cmFpbl9kb3duKSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgaXNfZm9yY2VfdHhfc3RyZWFtID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2Vpc19mb3JjZV90eF9zdHJlYW0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIGlzX2ZvcmNlX3NlX29mZiA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHMtXHUwMDNlaXNfZm9yY2Vfc2Vfb2ZmKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBtYXhfYW1wZHVfZmFjdG9yID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2VtYXhfYW1wZHVfZmFjdG9yKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICB0eF9yYXRlX3VwX3BlbmFsdHkgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZXR4X3JhdGVfdXBfcGVuYWx0eSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgbG93X3RyYWZmaWNfbW9kZSA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHMtXHUwMDNlbG93X3RyYWZmaWNfbW9kZSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgbG93X3RyYWZmaWNfY291bnQgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZWxvd190cmFmZmljX2NvdW50KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBsb3dfdHJhZmZpY19kYXNoYm9hcmQgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZWxvd190cmFmZmljX2Rhc2hib2FyZCk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgZHluYW1pY19zZ2lfc3RhdGUgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZWR5bmFtaWNfc2dpX3N0YXRlKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBkeW5hbWljX3NnaV9zY29yZSA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHMtXHUwMDNlZHluYW1pY19zZ2lfc2NvcmUpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIGR5bmFtaWNfYndfc3RhdGUgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZWR5bmFtaWNfYndfc3RhdGUpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2VkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgdmh0X25vbl9zcF9yYXRlX3N0YXRlID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2V2aHRfbm9uX3NwX3JhdGVfc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiBEZWNvZGUgdGhlIFRYIFZlY3RvciBCQlAgbGF0Y2ggdG8gc2hvdyB0aGUgY3VycmVudCBUWCBNQ1MgcmF0ZSAqL1xuJiM0MztcdGlmIChiYW5kX2lkeCBcdTAwM2MgTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTSlcbiYjNDM7XHRcdG10NzkyNV9wcmludF9sYXN0X3R4X3JhdGUocywgc3RhdHMtXHUwMDNldHhfdmVjdG9yW2JhbmRfaWR4XS50eHYpO1xuJiM0MztcbiYjNDM7XHQvKiBEdW1wIHRoZSB3aG9sZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgYW5kIG1hcmsgdGhlIGVudHJ5IGN1cnJlbnRseSAqL1xuJiM0MztcdGlmICh3dGJsX3JhdGVfdmFsaWQpXG4mIzQzO1x0XHRtdDc5MjVfZHVtcF9hdXRvX3JhdGVfdGFibGUocywgXHUwMDI2d3RibF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0c2VxX3B1dHMocywgXCYjMzQ7XFxubWliIHN0YXRlOlxcblwmIzM0Oyk7XG4mIzQzO1x0LyogPT09UnggUmVsYXRlZCBDb3VudGVycz09PSAqL1xuJiM0MztcdHNlcV9wdXRzKHMsIFwmIzM0Oz09PSBSeCBSZWxhdGVkIENvdW50ZXJzID09PVxcblwmIzM0Oyk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggd2l0aCBDUkMgPSAlbGx1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9GQ1NfRVJSXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlID0gJWxsdSAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfRklGT19PVkVSRkxPV10pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFJ4IE1wZHUgPSAlbGx1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9NUERVXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggQU1wZHUgPSAlbGx1IChQUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVF0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFJ4IFBGIERyb3AgPSAlbGx1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QRl9EUk9QXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggTGVuIE1pc21hdGNoID0gJWxsdSAoUFBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfTEVOX01JU01BVENIXSk7XG4mIzQzO1xuJiM0MztcdC8qID09PVBoeS9UaW1pbmcgUmVsYXRlZCBDb3VudGVycz09PSAqL1xuJiM0MztcdHNlcV9wdXRzKHMsIFwmIzM0O1xcbj09PSBQaHkvVGltaW5nIFJlbGF0ZWQgQ291bnRlcnMgPT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBDaGFubmVsSWRsZUNudCA9ICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgQ0NBX05BVl9UeF9UaW1lID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBSeF9NRFJEWV9DTlQgPSAlbGx1IChQUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9NRFJEWV0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIENDS19NRFJEWSA9ICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBPRkRNX01EUkRZID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBPRkRNX0dSRUVOX01EUkRZID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBQcmltIENDQSBUaW1lID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0NDQV9USU1FXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgU2VjIENDQSBUaW1lID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9TX0NDQV9USU1FXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUHJpbSBFRCBUaW1lID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0VEX1RJTUVdKTtcbiYjNDM7XG4mIzQzO1x0LyogPT09VHggUmVsYXRlZCBDb3VudGVycyhHZW5lcmljKT09PSAqL1xuJiM0MztcdHNlcV9wdXRzKHMsIFwmIzM0O1xcbj09PSBUeCBSZWxhdGVkIENvdW50ZXJzKEdlbmVyaWMpID09PVxcblwmIzM0Oyk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgQmVhY29uVHhDbnQgPSAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JDTl9UWF0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFR4IDQwTUh6IENudCA9ICVsbHUgIChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9UWF9CV180ME1IWl0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFR4IDgwTUh6IENudCA9ICVsbHUgIChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9UWF9CV184ME1IWl0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFR4IDE2ME1IeiBDbnQgPSAlbGx1ICAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfMTYwTUhaXSk7XG4mIzQzO1xuJiM0MztcdC8qID09PUJTU0lEWzBdIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi9cbiYjNDM7XHRzZXFfcHV0cyhzLCBcJiMzNDtcXG49PT0gQlNTSURbMF0gUmVsYXRlZCBDb3VudGVycyA9PT1cXG5cJiMzNDspO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIEJBIE1pc3MgQ250ID0gJWxsdSAgKFBQRFUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfQkFfTUlTU10pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFJUUyBUeCBDbnQgPSAlbGx1ICAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05UXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgRnJhbWUgUmV0cnkgQ250ID0gJWxsdSAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIEZyYW1lIFJldHJ5IDIgQ250ID0gJWxsdSAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8yXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUlRTIFJldHJ5IENudCA9ICVsbHUgKE1QRFUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgQWNrIEZhaWxlZCBDbnQgPSAlbGx1IChQUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0FDS19GQUlMXSk7XG4mIzQzO1xuJiM0MztcdC8qID09PUFNUERVIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi9cbiYjNDM7XHRzZXFfcHV0cyhzLCBcJiMzNDtcXG49PT0gQU1QRFUgUmVsYXRlZCBDb3VudGVycyA9PT1cXG5cJiMzNDspO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFR4IEFNUERVX1BrdF9DbnQgPSAlbGx1ICAoUFBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBUeCBBTVBEVV9NUERVX1BrdF9DbnQgPSAlbGx1ICAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIEFNUERVIFR4IHN1Y2Nlc3MgPSAlbGx1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF0pO1xuJiM0MztcbiYjNDM7XHR0eF90b3RhbCA9IG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVXTtcbiYjNDM7XHR0eF9mYWlsID0gIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVXSAtIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF07XG4mIzQzO1x0dHhfcGVyID0gdHhfdG90YWwgPT0gMCA/IDAgOiBkaXY2NF91NjQoMTAwMCAqIHR4X2ZhaWwsIHR4X3RvdGFsKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBBTVBEVSBUeCBmYWlsIGNvdW50ICAgPSAlbGx1ICAoTVBEVSksIFBFUj0lbGx1LiUxbGx1JSVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LFxuJiM0MztcdFx0ICAgdHhfZmFpbCxcbiYjNDM7XHRcdCAgIGRpdl91NjRfcmVtKHR4X3BlciwgMTAsIFx1MDAyNnR4X3Blcl9yZW0pLCAodTY0KXR4X3Blcl9yZW0pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtmcmVlKHN0YXRzKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGlyO1xuQEAgLTMxMyw1ICYjNDM7NjU2LDggQEAgaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbiBcdFx0XHRcdCAgICBtdDc5MnhfcG1fc3RhdHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtkZWVwLXNsZWVwXCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19kcyk7XG4gXG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cdTAwM2VtdDc2LmRldiwgXCYjMzQ7c3RhdHNcJiMzNDssIGRpcixcbiYjNDM7XHRcdFx0XHQgICAgbXQ3OTJ4X3N0YXRzKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YTQ3OTUzMDYyYmMzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5jXG5AQCAtMCwwICYjNDM7MSw1ODUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuJiM0MzsvKiBDb3B5cmlnaHQgKEMpIDIwMjYgTWVkaWFUZWsgSW5jLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O210NzkyNS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21jdS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21hYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N0YXRzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19WRVJTSU9OIDFcbiYjNDM7I2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1ZBTElEIDFVXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1UNzkyNV9NSUJfTUFYX0NOVFx0XHRcdDMyXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X01JQl9DTlRfTUFYX05VTVx0XHQ1MTIgIC8qIGZpcm13YXJlIFVOSV9DTURfTUlCX0NOVF9NQVhfTlVNIHVwcGVyIGJvdW5kICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1UNzkyNV9MUV9CQU5EX05VTVx0NFx0XHRcdC8qIExpbmsgcXVhbGl0eSBiYW5kICovXG4mIzQzO1xuJiM0Mztjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X21vZGVfc3RyW10gPSB7XG4mIzQzO1x0XCYjMzQ7Q0NLXCYjMzQ7LCBcJiMzNDtPRkRNXCYjMzQ7LCBcJiMzNDtNTVwmIzM0OywgXCYjMzQ7R0ZcJiMzNDssIFwmIzM0O1ZIVFwmIzM0OywgXCYjMzQ7UExSXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1BMUlBcJiMzNDssIFwmIzM0O0FMUlwmIzM0OywgXCYjMzQ7SEVfU1VcJiMzNDssIFwmIzM0O0hFX0VSXCYjMzQ7LCBcJiMzNDtIRV9UUklHXCYjMzQ7LCBcJiMzNDtIRV9NVVwmIzM0OyxcbiYjNDM7XHRcJiMzNDtFSFRfRVJcJiMzNDssIFwmIzM0O1RPRlwmIzM0OywgXCYjMzQ7RUhUX1RSSUdcJiMzNDssIFwmIzM0O0VIVF9NVVwmIzM0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7Y29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9yYXRlX2Nja19zdHJbXSA9IHtcbiYjNDM7XHRcJiMzNDsxTVwmIzM0OywgXCYjMzQ7Mk1cJiMzNDssIFwmIzM0OzUuNU1cJiMzNDssIFwmIzM0OzExTVwmIzM0OywgXCYjMzQ7Ti9BXCYjMzQ7XG4mIzQzO307XG4mIzQzO1xuJiM0Mztjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW10gPSB7XG4mIzQzO1x0XCYjMzQ7QlcyMFwmIzM0OywgXCYjMzQ7Qlc0MFwmIzM0OywgXCYjMzQ7Qlc4MFwmIzM0OywgXCYjMzQ7QlcxNjAvQlc4MDgwXCYjMzQ7LCBcJiMzNDtCVzMyMFwmIzM0OywgXCYjMzQ7Ti9BXCYjMzQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19yZXEge1xuJiM0MztcdHU4IHJzdls0XTtcbiYjNDM7XHRfX2xlMTYgdGFnO1xuJiM0MztcdF9fbGUxNiBsZW47XG4mIzQzO1x0dTggc3RhX3JlY19pZHg7XG4mIzQzO1x0dTggcnN2MTtcbiYjNDM7XHR1OCBsbHNfcmVhZF9jbGVhcjtcbiYjNDM7XHR1OCByZXNldF9jb3VudGVyO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQge1xuJiM0MztcdHU4IHJzdls0XTtcbiYjNDM7XHRfX2xlMTYgdGFnO1xuJiM0MztcdF9fbGUxNiBsZW47XG4mIzQzO1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHMgc3RhdHM7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBXVEJMIGF1dG8tcmF0ZSByZXF1ZXN0IFRMViwgbWlycm9yIEdlbjRtIHN0cnVjdCBVTklfQ01EX1NUQVRfV1RCTC5cbiYjNDM7ICogVGhlIFJBIHRhZyByZXVzZXMgVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgKDEwKS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfd3RibF9yYXRlX3JlcSB7XG4mIzQzO1x0dTggcnN2WzRdO1xuJiM0MztcdF9fbGUxNiB0YWc7XG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHRfX2xlMTYgd2xhbl9pZHg7XG4mIzQzO1x0X19sZTE2IHJzdjE7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBXVEJMIGF1dG8tcmF0ZSBldmVudCBUTFYuIEZpcm13YXJlIGFuc3dlcnMgY21kIHRhZyAxMCB3aXRoIGV2ZW50IHRhZyAxMi4gKi9cbiYjNDM7c3RydWN0IG10NzkyNV93dGJsX3JhdGVfZXZlbnQge1xuJiM0MztcdHU4IHJzdls0XTtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSByYXRlO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7LyogZml4ZWQgZmllbGQsIG1pcnJvciBVTklfKENNRHxFVkVOVClfTUlCX0lORk8gKi9cbiYjNDM7c3RydWN0IG10NzkyNV9taWJfaGRyIHtcbiYjNDM7XHR1OCBiYW5kX2lkeDtcbiYjNDM7XHR1OCByc3ZbM107XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBPbmUgcmVxdWVzdGVkL3JldHVybmVkIE1JQiBjb3VudGVyLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBX1QuICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfbWliX2RhdGEge1xuJiM0MztcdF9fbGUxNiB0YWc7XHQvKiBVTklfKENNRHxFVkVOVClfTUlCX0RBVEEgPSAwICovXG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHRfX2xlMzIgY291bnRlcjtcdC8qIE1JQiBjb3VudGVyIElEIChlbnVtIG10NzkyNV9taWJfY291bnRlcikgKi9cbiYjNDM7XHRfX2xlNjQgZGF0YTtcdC8qIG9ubHkgdmFsaWQgb24gZXZlbnQ7IGlnbm9yZWQgb24gY21kICovXG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBwZXItYmFuZCBsaW5rIHF1YWxpdHkgZW50cnksIG1pcnJvciBVTklfTElOS19RVUFMSVRZICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfbGlua19xdWFsaXR5IHtcbiYjNDM7XHRzOCByc3NpO1x0XHQvKiBtb3ZpbmctYXZlcmFnZSBiZWFjb24gUlNTSSBvZiBjb25uZWN0ZWQgQVAgKi9cbiYjNDM7XHRzOCBsaW5rX3F1YWxpdHk7XHQvKiBhbHdheXMgMCAqL1xuJiM0MztcdF9fbGUxNiBsaW5rX3NwZWVkO1x0LyogVFggcmF0ZTEsIHVuaXQgNTAwIEtiL3MgKi9cbiYjNDM7XHR1OCBtZWRpdW1fYnVzeV9wY3Q7XHQvKiBhbHdheXMgMCAqL1xuJiM0MztcdHU4IGlzX3JlYWR5O1x0XHQvKiAwOiBmaWVsZHMgaW52YWxpZCwgMTogdmFsaWQgKi9cbiYjNDM7XHR1OCByc3ZbMl07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiByZXF1ZXN0IFRMViwgbWlycm9yIFVOSV9DTURfTElOS19RVUFMSVRZIChoZWFkZXIgJiM0MzsgdGFnL2xlbiBvbmx5KSAqL1xuJiM0MztzdHJ1Y3QgbXQ3OTI1X2xxX3JlcSB7XG4mIzQzO1x0dTggcnN2WzRdO1x0XHQvKiBVTklfQ01EX0dFVF9TVEFUSVNUSUNTIGZpeGVkIGZpZWxkICovXG4mIzQzO1x0X19sZTE2IHRhZztcdFx0LyogVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19RVUFMSVRZID0gMSAqL1xuJiM0MztcdF9fbGUxNiBsZW47XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBldmVudCBUTFYsIG1pcnJvciBVTklfRVZFTlRfTElOS19RVUFMSVRZICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfbHFfZXZlbnQge1xuJiM0MztcdHU4IHJzdls0XTtcdFx0LyogVU5JX0VWRU5UX1NUQVRJU1RJQ1MgZml4ZWQgZmllbGQgKi9cbiYjNDM7XHRfX2xlMTYgdGFnO1x0XHQvKiBVTklfRVZFTlRfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkgPSAxICovXG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSBscVtNVDc5MjVfTFFfQkFORF9OVU1dO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7bXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeF9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG10NzkyNV9zdGFfcmVjX2xvb2t1cCAqbG9va3VwID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTJ4X3ZpZiAqbXZpZjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTJ4X3N0YSAqbXN0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxvb2t1cC1cdTAwM2VzdGFfcmVjX2lkeCBcdTAwM2U9IDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICh2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8ICF2aWYtXHUwMDNlY2ZnLmFzc29jKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtdmlmID0gKHN0cnVjdCBtdDc5MnhfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuJiM0MztcdG1zdGEgPSBtdmlmLVx1MDAzZXdlcF9zdGE7XG4mIzQzO1x0aWYgKCFtc3RhKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1zdGEtXHUwMDNlZGVmbGluay53Y2lkLnN0YSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bG9va3VwLVx1MDAzZXN0YV9yZWNfaWR4ID0gbXN0YS1cdTAwM2VkZWZsaW5rLndjaWQuaWR4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7bXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqc3RhX3JlY19pZHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwIGxvb2t1cCA9IHtcbiYjNDM7XHRcdC5zdGFfcmVjX2lkeCA9IC0xLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2LVx1MDAzZW10NzYubXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhkZXYtXHUwMDNlbXBoeS5odyxcbiYjNDM7XHRcdFx0XHRcdCAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9SRVNVTUVfQUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgIG10NzkyNV9nZXRfYXBfc3RhX3JlY19pZHhfaXRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICBcdTAwMjZsb29rdXApO1xuJiM0MztcbiYjNDM7XHRpZiAobG9va3VwLnN0YV9yZWNfaWR4IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9UQ09OTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxvb2t1cC5zdGFfcmVjX2lkeCBcdTAwM2UgVThfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdCpzdGFfcmVjX2lkeCA9IGxvb2t1cC5zdGFfcmVjX2lkeDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIERlY29kZSB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCBhbmQgcHJpbnQgdGhlIGxhc3QgVFggcmF0ZSAqL1xuJiM0Mzt2b2lkXG4mIzQzO210NzkyNV9wcmludF9sYXN0X3R4X3JhdGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBfX2xlMzIgbGVfdHh2WzNdKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kZV9zdHIgPSBcJiMzNDtOL0FcJiMzNDs7XG4mIzQzO1x0dTggcmF0ZSwgdHhtb2RlLCBmcm1vZGUsIHNnaSwgbGRwYywgbnN0cywgc3RiYywgc3BlLCBkY20sIGVyc3UxMDZ0O1xuJiM0MztcdHM4IHR4cHdyLCBwb3NfdHhwd3I7XG4mIzQzO1x0dTMyIHR4dlszXTtcbiYjNDM7XG4mIzQzO1x0dHh2WzBdID0gbGUzMl90b19jcHUobGVfdHh2WzBdKTtcbiYjNDM7XHR0eHZbMV0gPSBsZTMyX3RvX2NwdShsZV90eHZbMV0pO1xuJiM0MztcdHR4dlsyXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsyXSk7XG4mIzQzO1xuJiM0MztcdGlmICh0eHZbMF0gPT0gMHhmZmZmZmZmZikge1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgJXMgPSAlc1xcblwmIzM0OywgXCYjMzQ7IFwmIzM0OywgXCYjMzQ7TGFzdCBUWCBSYXRlXCYjMzQ7LCBcJiMzNDtOL0FcJiMzNDspO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgJXMgPSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7IFwmIzM0OywgXCYjMzQ7Q2hpcCBPdXQgVFggUG93ZXJcJiMzNDssIFwmIzM0O04vQVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXRlID0gTVQ3OTI1X1RYVl9HRVRfVFhfUkFURSh0eHYpO1xuJiM0MztcdHR4bW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX01PREUodHh2KTtcbiYjNDM7XHRmcm1vZGUgPSBNVDc5MjVfVFhWX0dFVF9UWF9GUk1PREUodHh2KTtcbiYjNDM7XHRuc3RzID0gTVQ3OTI1X1RYVl9HRVRfVFhfTlNUUyh0eHYpICYjNDM7IDE7XG4mIzQzO1x0c2dpID0gTVQ3OTI1X1RYVl9HRVRfVFhfU0dJKHR4dik7XG4mIzQzO1x0bGRwYyA9IE1UNzkyNV9UWFZfR0VUX1RYX0xEUEModHh2KTtcbiYjNDM7XHRzdGJjID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyh0eHYpO1xuJiM0MztcdHR4cHdyID0gTVQ3OTI1X1RYVl9HRVRfVFhfUFdSKHR4dik7XG4mIzQzO1x0c3BlID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1BFX0lEWCh0eHYpO1xuJiM0MztcdGRjbSA9IE1UNzkyNV9UWFZfR0VUX1RYX0RDTSh0eHYpO1xuJiM0MztcdGVyc3UxMDZ0ID0gTVQ3OTI1X1RYVl9HRVRfVFhfMTA2VCh0eHYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZGNtKVxuJiM0MztcdFx0cmF0ZSA9IE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfRENNKHJhdGUpO1xuJiM0MztcdGlmIChlcnN1MTA2dClcbiYjNDM7XHRcdHJhdGUgPSBNVDc5MjVfVFhWX1JBVEVfVU5NQVNLXzEwNlQocmF0ZSk7XG4mIzQzO1xuJiM0MztcdGlmICh0eG1vZGUgXHUwMDNjIEFSUkFZX1NJWkUobXQ3OTI1X3R4X21vZGVfc3RyKSlcbiYjNDM7XHRcdG1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgICVzID0gXCYjMzQ7LCBcJiMzNDsgXCYjMzQ7LCBcJiMzNDtMYXN0IFRYIFJhdGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiByYXRlL01DUyBmaWVsZCAqL1xuJiM0MztcdGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0spXG4mIzQzO1x0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzLCBcJiMzNDssXG4mIzQzO1x0XHRcdCAgIHJhdGUgXHUwMDNjIDQgPyBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGVdIDpcbiYjNDM7XHRcdFx0ICAgKCgocmF0ZSBcdTAwM2U9IDUpIFx1MDAyNlx1MDAyNiAocmF0ZSBcdTAwM2M9IDcpKSA/XG4mIzQzO1x0XHRcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGUgLSA0XSA6XG4mIzQzO1x0XHRcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyWzRdKSk7XG4mIzQzO1x0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSlcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0OywgbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIocmF0ZSkpO1xuJiM0MztcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XG4mIzQzO1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRilcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7TUNTJWQsIFwmIzM0OywgcmF0ZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcyVkX01DUyVkLCBcJiMzNDssXG4mIzQzO1x0XHRcdCAgIHN0YmMgPyBcJiMzNDtOU1RTXCYjMzQ7IDogXCYjMzQ7TlNTXCYjMzQ7LCBuc3RzLCByYXRlKTtcbiYjNDM7XG4mIzQzO1x0LyogYmFuZHdpZHRoICovXG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LFxuJiM0MztcdFx0ICAgZnJtb2RlIFx1MDAzYyA1ID8gbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZybW9kZV0gOlxuJiM0MztcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcbiYjNDM7XG4mIzQzO1x0LyogR0kgLyBwcmVhbWJsZSAqL1xuJiM0MztcdGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0spXG4mIzQzO1x0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzLCBcJiMzNDssIHJhdGUgXHUwMDNjIDQgPyBcJiMzNDtMUFwmIzM0OyA6IFwmIzM0O1NQXCYjMzQ7KTtcbiYjNDM7XHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuJiM0MztcdFx0OyAvKiBPRkRNIGhhcyBubyBHSS9wcmVhbWJsZSB0byBwcmludCAqL1xuJiM0MztcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XG4mIzQzO1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiB8fFxuJiM0MztcdFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCB8fFxuJiM0MztcdFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1BMUilcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0Oywgc2dpID09IDAgPyBcJiMzNDtMR0lcJiMzNDsgOiBcJiMzNDtTR0lcJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgc2dpID09IDAgPyBcJiMzNDtTR0lcJiMzNDsgOiAoc2dpID09IDEgPyBcJiMzNDtNR0lcJiMzNDsgOiBcJiMzNDtMR0lcJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0LyogbW9kZSwgRENNLCAxMDZ0LCBTVEJDLCBjb2RpbmcsIFNQRSAqL1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JXMlcyVzJXMlcyVzJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBtb2RlX3N0cixcbiYjNDM7XHRcdCAgIGRjbSA/IFwmIzM0OywgRENNXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBlcnN1MTA2dCA/IFwmIzM0OywgMTA2dFwmIzM0OyA6IFwmIzM0O1wmIzM0OyxcbiYjNDM7XHRcdCAgIHN0YmMgPyBcJiMzNDssIFNUQkMsIFwmIzM0OyA6IFwmIzM0OywgXCYjMzQ7LCBsZHBjID09IDAgPyBcJiMzNDtCQ0NcJiMzNDsgOiBcJiMzNDtMRFBDXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7LCBTUEVcJiMzNDssIHNwZSk7XG4mIzQzO1xuJiM0MztcdC8qIGNoaXAgb3V0IFRYIHBvd2VyICh1bml0OiAwLjUgZEJtKSAqL1xuJiM0MztcdHBvc190eHB3ciA9ICh0eHB3ciBcdTAwM2MgMCkgPyAofnR4cHdyICYjNDM7IDEpIDogdHhwd3I7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgJXMgPSAlYyVkLiUxZCBkQm1cXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBcJiMzNDtDaGlwIE91dCBUWCBQb3dlclwmIzM0OyxcbiYjNDM7XHRcdCAgICh0eHB3ciBcdTAwM2MgMCkgPyAmIzM5Oy0mIzM5OyA6ICYjMzk7JiM0MzsmIzM5OyxcbiYjNDM7XHRcdCAgIChwb3NfdHhwd3IgLyAyKSwgNSAqIChwb3NfdHhwd3IgJSAyKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEd1YXJkIGludGVydmFsIHVzZWQgZm9yIHRoZSBhdXRvLXJhdGUgZW50cmllcywgbWlycm9yIEdlbjRtXG4mIzQzOyAqIGNvbm5hYzN4X2dldF9zZ2lfaW5mb19mcm9tX2Z3KCk6IHBpY2sgdGhlIHBlci1tb2RlL3Blci1CVyBmbGFnLlxuJiM0MzsgKi9cbiYjNDM7dThcbiYjNDM7bXQ3OTI1X3d0YmxfZ2V0X3NnaShjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSwgdTggZmNhcClcbiYjNDM7e1xuJiM0MztcdGJvb2wgaGUgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfU1UgfHxcbiYjNDM7XHRcdCAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX0VSIHx8XG4mIzQzO1x0XHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHIHx8XG4mIzQzO1x0XHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9NVSk7XG4mIzQzO1x0Ym9vbCBlaHQgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX0VSIHx8XG4mIzQzO1x0XHQgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUcgfHxcbiYjNDM7XHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUpO1xuJiM0MztcbiYjNDM7XHRpZiAoZWh0KVxuJiM0MztcdFx0cmV0dXJuIHdyLVx1MDAzZWdpX2VodDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChmY2FwKSB7XG4mIzQzO1x0Y2FzZSBNVDc5MjVfQldfMjA6XG4mIzQzO1x0XHRyZXR1cm4gaGUgPyB3ci1cdTAwM2VnMl9oZSA6IHdyLVx1MDAzZWcyO1xuJiM0MztcdGNhc2UgTVQ3OTI1X0JXXzQwOlxuJiM0MztcdFx0cmV0dXJuIGhlID8gd3ItXHUwMDNlZzRfaGUgOiB3ci1cdTAwM2VnNDtcbiYjNDM7XHRjYXNlIE1UNzkyNV9CV184MDpcbiYjNDM7XHRcdHJldHVybiBoZSA/IHdyLVx1MDAzZWc4X2hlIDogd3ItXHUwMDNlZzg7XG4mIzQzO1x0Y2FzZSBNVDc5MjVfQldfMTYwOlxuJiM0MztcdFx0cmV0dXJuIGhlID8gd3ItXHUwMDNlZzE2X2hlIDogd3ItXHUwMDNlZzE2O1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENvZGluZyB1c2VkIGZvciB0aGUgYXV0by1yYXRlIGVudHJpZXMsIG1pcnJvciBHZW40bVxuJiM0MzsgKiBjb25uYWMzeF93dGJsX2dldF9sZHBjX2luZm9fZnJvbV9mdygpOiAwID0gQkNDLCAxID0gTERQQy5cbiYjNDM7ICovXG4mIzQzO3U4XG4mIzQzO210NzkyNV93dGJsX2dldF9sZHBjKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0eG1vZGUpIHtcbiYjNDM7XHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVg6XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0Y6XG4mIzQzO1x0XHRyZXR1cm4gd3ItXHUwMDNlaHRfbGRwYztcbiYjNDM7XHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfVkhUOlxuJiM0MztcdFx0cmV0dXJuIHdyLVx1MDAzZXZodF9sZHBjO1xuJiM0MztcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9TVTpcbiYjNDM7XHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVI6XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1RSSUc6XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VOlxuJiM0MztcdFx0cmV0dXJuIHdyLVx1MDAzZWhlX2xkcGM7XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUjpcbiYjNDM7XHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUc6XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9NVTpcbiYjNDM7XHRcdHJldHVybiB3ci1cdTAwM2VlaHRfbGRwYztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxuJiM0MztcdFx0XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyAqc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbGVuID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19ldmVudCAqZXZlbnQgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX3JlcSByZXEgPSB7XG4mIzQzO1x0XHQudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NUQSksXG4mIzQzO1x0XHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxuJiM0MztcdFx0Lmxsc19yZWFkX2NsZWFyID0gZmFsc2UsXG4mIzQzO1x0XHQucmVzZXRfY291bnRlciA9IGZhbHNlLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldCA9IG10NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoZGV2LCBcdTAwMjZyZXEuc3RhX3JlY19pZHgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0YXRzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG4mIzQzO1x0XHRcdFx0XHRNQ1VfVU5JX1FVRVJZKEdFVF9TVEFUX0lORk8pLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2V2ZW50ICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShldmVudC1cdTAwM2V0YWcpICE9IFVOSV9DTURfSURfU1RBVElTVElDU19TVEEpIHtcbiYjNDM7XHRcdHJldCA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxlbiA9IGxlMTZfdG9fY3B1KGV2ZW50LVx1MDAzZWxlbik7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKCpldmVudCkgLSBzaXplb2YoZXZlbnQtXHUwMDNlcnN2KSB8fFxuJiM0MztcdCAgICBsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBzaXplb2YoZXZlbnQtXHUwMDNlcnN2KSB8fCAhSVNfQUxJR05FRChsZW4sIDQpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChldmVudC1cdTAwM2VzdGF0cy52ZXJzaW9uICE9IE1UNzkyNV9TVEFfU1RBVFNfVkVSU0lPTikge1xuJiM0MztcdFx0cmV0ID0gLUVQUk9UTztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCEobGUzMl90b19jcHUoZXZlbnQtXHUwMDNlc3RhdHMuZmxhZ3MpIFx1MDAyNiBNVDc5MjVfU1RBX1NUQVRTX1ZBTElEKSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtY3B5KHN0YXRzLCBcdTAwMjZldmVudC1cdTAwM2VzdGF0cywgc2l6ZW9mKCpzdGF0cykpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXQ3OTI1X21jdV9nZXRfbWliX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKmNvdW50ZXJzLCB1OCBjb3VudGVyX251bSxcbiYjNDM7XHRcdFx0ICAgIHU2NCAqdmFsdWVzKVxuJiM0Mzt7XG4mIzQzO1x0dTggKnJlcTtcbiYjNDM7XHR1OCAqdGx2LCAqdGx2X2VuZDtcbiYjNDM7XHR1MTYgcmVxX2xlbjtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfbWliX2hkciAqcmVxX2hkcjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICpyZXFfdGx2O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdGlmICghY291bnRlcnMgfHwgIXZhbHVlcyB8fCAhY291bnRlcl9udW0gfHxcbiYjNDM7XHQgICAgY291bnRlcl9udW0gXHUwMDNlIE1UNzkyNV9NSUJfTUFYX0NOVClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBjbGVhciBvdXRwdXQ7IGNvdW50ZXJzIG5vdCByZXR1cm5lZCBieSBmaXJtd2FyZSBzdGF5IDAgKi9cbiYjNDM7XHRtZW1zZXQodmFsdWVzLCAwLCBjb3VudGVyX251bSAqIHNpemVvZigqdmFsdWVzKSk7XG4mIzQzO1xuJiM0MztcdHJlcV9sZW4gPSBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSAmIzQzO1xuJiM0MztcdFx0ICBjb3VudGVyX251bSAqIHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKTtcbiYjNDM7XG4mIzQzO1x0cmVxID0ga3phbGxvYyhyZXFfbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJlcSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXFfaGRyID0gKHN0cnVjdCBtdDc5MjVfbWliX2hkciAqKXJlcTtcbiYjNDM7XHRyZXFfaGRyLVx1MDAzZWJhbmRfaWR4ID0gYmFuZF9pZHg7XG4mIzQzO1xuJiM0MztcdHJlcV90bHYgPSAoc3RydWN0IG10NzkyNV9taWJfZGF0YSAqKShyZXEgJiM0Mzsgc2l6ZW9mKCpyZXFfaGRyKSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnRlcl9udW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXFfdGx2W2ldLnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfTUlCX0RBVEEpO1xuJiM0MztcdFx0cmVxX3RsdltpXS5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSkpO1xuJiM0MztcdFx0cmVxX3RsdltpXS5jb3VudGVyID0gY3B1X3RvX2xlMzIoY291bnRlcnNbaV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbiYjNDM7XHRcdFx0XHRcdE1DVV9VTklfUVVFUlkoR0VUX01JQl9JTkZPKSwgcmVxLFxuJiM0MztcdFx0XHRcdFx0cmVxX2xlbiwgdHJ1ZSwgXHUwMDI2c2tiKTtcbiYjNDM7XHRrZnJlZShyZXEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcikpIHtcbiYjNDM7XHRcdHJldCA9IC1FTVNHU0laRTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Lyogd2FsayB0aGUgcmV0dXJuZWQgVExWcywgbWF0Y2ggZWFjaCBjb3VudGVyIElEIHRvIHRoZSByZXF1ZXN0ICovXG4mIzQzO1x0dGx2ID0gc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcik7XG4mIzQzO1x0dGx2X2VuZCA9IHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYi1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdHdoaWxlICh0bHYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpIFx1MDAzYz0gdGx2X2VuZCkge1xuJiM0MztcdFx0c3RydWN0IG10NzkyNV9taWJfZGF0YSAqZXZ0X3RsdiA9XG4mIzQzO1x0XHRcdChzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICopdGx2O1xuJiM0MztcdFx0dTE2IHRhZyA9IGxlMTZfdG9fY3B1KGV2dF90bHYtXHUwMDNldGFnKTtcbiYjNDM7XHRcdHUxNiBsZW4gPSBsZTE2X3RvX2NwdShldnRfdGx2LVx1MDAzZWxlbik7XG4mIzQzO1x0XHR1MzIgY291bnRlcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSkgfHxcbiYjNDM7XHRcdCAgICB0bHYgJiM0MzsgbGVuIFx1MDAzZSB0bHZfZW5kKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGFnID09IFVOSV9DTURfTUlCX0RBVEEpIHtcbiYjNDM7XHRcdFx0Y291bnRlciA9IGxlMzJfdG9fY3B1KGV2dF90bHYtXHUwMDNlY291bnRlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoY291bnRlciBcdTAwM2MgTVQ3OTI1X01JQl9DTlRfTUFYX05VTSkge1xuJiM0MztcdFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50ZXJfbnVtOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdFx0aWYgKGNvdW50ZXJzW2ldID09IGNvdW50ZXIpIHtcbiYjNDM7XHRcdFx0XHRcdFx0dmFsdWVzW2ldID1cbiYjNDM7XHRcdFx0XHRcdFx0ICBsZTY0X3RvX2NwdShldnRfdGx2LVx1MDAzZWRhdGEpO1xuJiM0MztcdFx0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR0bHYgJiM0Mzs9IGxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IDA7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyICptdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cih1OCBvZmRtX2lkeClcbiYjNDM7e1xuJiM0MztcdGNoYXIgKiBjb25zdCBvZmRtX3N0cltdID0ge1xuJiM0MztcdFx0XCYjMzQ7Nk1cJiMzNDssIFwmIzM0OzlNXCYjMzQ7LCBcJiMzNDsxMk1cJiMzNDssIFwmIzM0OzE4TVwmIzM0OywgXCYjMzQ7MjRNXCYjMzQ7LCBcJiMzNDszNk1cJiMzNDssIFwmIzM0OzQ4TVwmIzM0OywgXCYjMzQ7NTRNXCYjMzQ7LCBcJiMzNDtOL0FcJiMzNDtcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKG9mZG1faWR4KSB7XG4mIzQzO1x0Y2FzZSAxMTogcmV0dXJuIG9mZG1fc3RyWzBdO1x0LyogNk0gKi9cbiYjNDM7XHRjYXNlIDE1OiByZXR1cm4gb2ZkbV9zdHJbMV07XHQvKiA5TSAqL1xuJiM0MztcdGNhc2UgMTA6IHJldHVybiBvZmRtX3N0clsyXTtcdC8qIDEyTSAqL1xuJiM0MztcdGNhc2UgMTQ6IHJldHVybiBvZmRtX3N0clszXTtcdC8qIDE4TSAqL1xuJiM0MztcdGNhc2UgOTogIHJldHVybiBvZmRtX3N0cls0XTtcdC8qIDI0TSAqL1xuJiM0MztcdGNhc2UgMTM6IHJldHVybiBvZmRtX3N0cls1XTtcdC8qIDM2TSAqL1xuJiM0MztcdGNhc2UgODogIHJldHVybiBvZmRtX3N0cls2XTtcdC8qIDQ4TSAqL1xuJiM0MztcdGNhc2UgMTI6IHJldHVybiBvZmRtX3N0cls3XTtcdC8qIDU0TSAqL1xuJiM0MztcdGRlZmF1bHQ6IHJldHVybiBvZmRtX3N0cls4XTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIG10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZSAtIGZldGNoIHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgZm9yIGEgV0NJRFxuJiM0MzsgKiBAZGV2Olx0ZGV2aWNlXG4mIzQzOyAqIEB3bGFuX2lkeDpcdEhXIFdUQkwgLyBXQ0lEIGluZGV4IChzZWUgbXQ3OTI1X3N0YV9zdGF0cy53dGJsX2lkeClcbiYjNDM7ICogQHJhdGU6XHRvdXQsIGZpbGxlZCB3aXRoIHRoZSBhdXRvLXJhdGUgdGFibGUgc25hcHNob3RcbiYjNDM7ICpcbiYjNDM7ICogTWlycm9yIG9mIEdlbjRtIHdsYW5vaWRHZXRTdGF0V3RibCgpOiBzZW5kIFVOSV9DTURfR0VUX1NUQVRfSU5GTyB3aXRoIHRoZVxuJiM0MzsgKiBXVEJMIHJhdGUgVExWIChjbWQgdGFnIDEwKSBhbmQgcGFyc2UgdGhlIHJlcGx5IChldmVudCB0YWcgMTIpIGludG8gQHJhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0MztpbnQgbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUxNiB3bGFuX2lkeCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqcmF0ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RydWN0IG10NzkyNV93dGJsX3JhdGVfZXZlbnQgKmV2ZW50ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZV9yZXEgcmVxID0ge1xuJiM0MztcdFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMKSxcbiYjNDM7XHRcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksXG4mIzQzO1x0XHQud2xhbl9pZHggPSBjcHVfdG9fbGUxNih3bGFuX2lkeCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG4mIzQzO1x0XHRcdFx0XHRNQ1VfVU5JX1FVRVJZKEdFVF9TVEFUX0lORk8pLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqZXZlbnQpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShldmVudC1cdTAwM2VyYXRlLnRhZykgIT0gTVQ3OTI1X1VOSV9FVkVOVF9TVEFUSVNUSUNTX1dUQkwpIHtcbiYjNDM7XHRcdHJldCA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1lbWNweShyYXRlLCBcdTAwMjZldmVudC1cdTAwM2VyYXRlLCBzaXplb2YoKnJhdGUpKTtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5IC0gcXVlcnkgUlNTSSBhbmQgVFggbGluayBzcGVlZCBmb3IgYSBiYW5kXG4mIzQzOyAqIEBkZXY6XHRkZXZpY2VcbiYjNDM7ICogQGJhbmRfaWR4Olx0YmFuZC9CU1MgaW5kZXggKDAuLjMpXG4mIzQzOyAqIEByc3NpOlx0b3V0LCBtb3ZpbmctYXZlcmFnZSBiZWFjb24gUlNTSSBpbiBkQm0gKG1heSBiZSBOVUxMKVxuJiM0MzsgKiBAdHhfbGlua19zcGVlZF9rYnBzOiBvdXQsIFRYIHJhdGUgaW4ga2JpdC9zIChtYXkgYmUgTlVMTClcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9FTlQgaWYgdGhlIGJhbmQmIzM5O3MgbGluayBxdWFsaXR5IGlzIG5vdCByZWFkeS5cbiYjNDM7ICpcbiYjNDM7ICogT25seSBSU1NJIGFuZCBUWCByYXRlIGNvbWUgZnJvbSBmaXJtd2FyZSBoZXJlOyBmb3IgUlggcmF0ZSByZWFkIHdjaWQtXHUwMDNlcmF0ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4mIzQzO1x0XHRcdFx0czggKnJzc2ksIHUzMiAqdHhfbGlua19zcGVlZF9rYnBzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X2xxX2V2ZW50ICpldmVudDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSAqbHE7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X2xxX3JlcSByZXEgPSB7XG4mIzQzO1x0XHQudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSksXG4mIzQzO1x0XHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChiYW5kX2lkeCBcdTAwM2U9IE1UNzkyNV9MUV9CQU5EX05VTSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuJiM0MztcdFx0XHRcdFx0TUNVX1VOSV9RVUVSWShHRVRfU1RBVF9JTkZPKSwgXHUwMDI2cmVxLFxuJiM0MztcdFx0XHRcdFx0c2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKmV2ZW50KSkge1xuJiM0MztcdFx0cmV0ID0gLUVNU0dTSVpFO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRldmVudCA9IChzdHJ1Y3QgbXQ3OTI1X2xxX2V2ZW50ICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShldmVudC1cdTAwM2V0YWcpICE9IFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkpIHtcbiYjNDM7XHRcdHJldCA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxxID0gXHUwMDI2ZXZlbnQtXHUwMDNlbHFbYmFuZF9pZHhdO1xuJiM0MztcdGlmICghbHEtXHUwMDNlaXNfcmVhZHkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyc3NpKVxuJiM0MztcdFx0KnJzc2kgPSBscS1cdTAwM2Vyc3NpO1xuJiM0MztcbiYjNDM7XHQvKiBmaXJtd2FyZSByZXBvcnRzIFRYIHJhdGUgaW4gNTAwIEtiL3MgdW5pdHMgLVx1MDAzZSBrYml0L3MgKi9cbiYjNDM7XHRpZiAodHhfbGlua19zcGVlZF9rYnBzKVxuJiM0MztcdFx0KnR4X2xpbmtfc3BlZWRfa2JwcyA9IGxlMTZfdG9fY3B1KGxxLVx1MDAzZWxpbmtfc3BlZWQpICogNTAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTcwYjllYjNhYTgwNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaFxuQEAgLTAsMCAmIzQzOzEsMzA5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi9cbiYjNDM7LyogQ29weXJpZ2h0IChDKSAyMDI2IE1lZGlhVGVrIEluYy4gKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19NVDc5MjVfU1RBVFNfSFxuJiM0MzsjZGVmaW5lIF9fTVQ3OTI1X1NUQVRTX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9tdDc2X2Nvbm5hY19tY3UuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0FDX05VTSA0XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTSAyXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNIDE2XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19UWF9RVUFMSVRZX05VTSA0XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYX01PREVfTlVNICAgICAgMTZcbiYjNDM7I2RlZmluZSBNVDc5MjVfVFhfUkFURV9DQ0tfTlVNICA1XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYX1JBVEVfQldfTlVNICAgNlxuJiM0MztcbiYjNDM7LyogSFcgcmF0ZSBjb2RlICgxNi1iaXQpIGZpZWxkIGV4dHJhY3QsIG1pcnJvciBHZW40bSBDT05OQUMzWF9IV19UWF9SQVRFX1RPXyouXG4mIzQzOyAqIFRoZSBhdXRvLXJhdGUgdGFibGUgc3RvcmVzIG9uZSByYXRlIGNvZGUgcGVyIGVudHJ5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19NQ1MoX3gpXHQoKChfeCkgXHUwMDI2IEdFTk1BU0soNSwgMCkpIFx1MDAzZVx1MDAzZSAwKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX01PREUoX3gpXHQoKChfeCkgXHUwMDI2IEdFTk1BU0soOSwgNikpIFx1MDAzZVx1MDAzZSA2KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX05TUyhfeClcdCgoKF94KSBcdTAwMjYgR0VOTUFTSygxMywgMTApKSBcdTAwM2VcdTAwM2UgMTApXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fU1RCQyhfeClcdCgoKF94KSBcdTAwMjYgQklUKDE0KSkgXHUwMDNlXHUwMDNlIDE0KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX0RDTShfeClcdCgoKF94KSBcdTAwMjYgQklUKDQpKSBcdTAwM2VcdTAwM2UgNClcbiYjNDM7I2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT18xMDZUKF94KVx0KCgoX3gpIFx1MDAyNiBCSVQoNSkpIFx1MDAzZVx1MDAzZSA1KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00oX3IpXHQoKHU4KShfcikgXHUwMDI2IDB4ZWYpXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVU5NQVNLXzEwNlQoX3IpXHQoKHU4KShfcikgXHUwMDI2IDB4ZGYpXG4mIzQzO1xuJiM0MzsvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIChtaXJyb3IgR2VuNG1cbiYjNDM7ICogQVVUT19SQVRFX05VTSkuIFJBIGN5Y2xlcyB0aHJvdWdoIHRoZXNlIGFuZCByZXBvcnRzIHdoaWNoIG9uZSBpcyBpbiB1c2VcbiYjNDM7ICogdmlhIHd0YmwtXHUwMDNlcmF0ZV9pZHguXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1UNzkyNV9BVVRPX1JBVEVfTlVNIDhcbiYjNDM7XG4mIzQzOy8qIEZpcm13YXJlIEVWRU5UX1NUQVRJU1RJQ1Mgc3ViLWV2ZW50IHRhZ3MuIFRoZSBXVEJMIHJhdGUgcmVxdWVzdCB1c2VzIGNtZCB0YWdcbiYjNDM7ICogVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgKDEwKSBidXQgdGhlIGZpcm13YXJlIHJlcGxpZXMgd2l0aCBldmVudCB0YWcgMTIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1UNzkyNV9VTklfRVZFTlRfU1RBVElTVElDU19XVEJMIDEyXG4mIzQzO1xuJiM0MzsvKiBDT05OQUMzWCBUWCBWZWN0b3IgQkJQIGxhdGNoIGJpdCBmaWVsZHMgKG1pcnJvciBjbW1fYXNpY19jb25uYWMzeC5oKS5cbiYjNDM7ICogVGhlc2Ugb3BlcmF0ZSBvbiB0aGUgMy1EV09SRCB0eF92ZWN0b3JbYmFuZF0udHh2WzNdIGFycmF5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9SQVRFKF90eHYpXHQoKF90eHYpWzJdIFx1MDAyNiAweDdmKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0xEUEMoX3R4dilcdCgoKF90eHYpWzJdIFx1MDAyNiAoMHgxIFx1MDAzY1x1MDAzYyA3KSkgXHUwMDNlXHUwMDNlIDcpXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyhfdHh2KVx0KCgoX3R4dilbMF0gXHUwMDI2ICgweDMgXHUwMDNjXHUwMDNjIDYpKSBcdTAwM2VcdTAwM2UgNilcbiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9GUk1PREUoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHg3IFx1MDAzY1x1MDAzYyA4KSkgXHUwMDNlXHUwMDNlIDgpXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfTU9ERShfdHh2KVx0KCgoX3R4dilbMF0gXHUwMDI2ICgweGYgXHUwMDNjXHUwMDNjIDEyKSkgXHUwMDNlXHUwMDNlIDEyKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX05TVFMoX3R4dilcdCgoKF90eHYpWzJdIFx1MDAyNiAoMHhmVSBcdTAwM2NcdTAwM2MgMjgpKSBcdTAwM2VcdTAwM2UgMjgpXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUFdSKF90eHYpXHQoKChfdHh2KVswXSBcdTAwMjYgKDB4ZmYgXHUwMDNjXHUwMDNjIDE2KSkgXHUwMDNlXHUwMDNlIDE2KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NHSShfdHh2KVx0KCgoX3R4dilbMV0gXHUwMDI2ICgweDMgXHUwMDNjXHUwMDNjIDI2KSkgXHUwMDNlXHUwMDNlIDI2KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NQRV9JRFgoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHgxZiBcdTAwM2NcdTAwM2MgMCkpIFx1MDAzZVx1MDAzZSAwKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0RDTShfdHh2KVx0KCgoX3R4dilbMl0gXHUwMDI2ICgweDEgXHUwMDNjXHUwMDNjIDQpKSBcdTAwM2VcdTAwM2UgNClcbiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF8xMDZUKF90eHYpXHQoKChfdHh2KVsyXSBcdTAwMjYgKDB4MSBcdTAwM2NcdTAwM2MgNSkpIFx1MDAzZVx1MDAzZSA1KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfRENNKF9yKVx0KCh1OCkoX3IpIFx1MDAyNiAweGVmKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfMTA2VChfcilcdCgodTgpKF9yKSBcdTAwMjYgMHhkZilcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X21vZGVfc3RyW01UNzkyNV9UWF9NT0RFX05VTV07XG4mIzQzO2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltNVDc5MjVfVFhfUkFURV9DQ0tfTlVNXTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbTVQ3OTI1X1RYX1JBVEVfQldfTlVNXTtcbiYjNDM7XG4mIzQzOy8qIFRYIHJhdGUgbW9kZSwgbWlycm9yIEdlbjRtIFRYX1JBVEVfTU9ERV8qIChzZWUgbmljX3JhdGUuaCkuIFVzZWQgdG8gZGVjb2RlXG4mIzQzOyAqIGJvdGggdGhlIFRYIFZlY3RvciBCQlAgbGF0Y2ggYW5kIHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgcmF0ZSBjb2Rlcy5cbiYjNDM7ICovXG4mIzQzO2VudW0gbXQ3OTI1X3R4X3JhdGVfbW9kZSB7XG4mIzQzO1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgPSAwLFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSA9IDEsXG4mIzQzO1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCA9IDIsXG4mIzQzO1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGID0gMyxcbiYjNDM7XHRNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCA9IDQsXG4mIzQzO1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIgPSA1LFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfU1UgPSA4LFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgPSA5LFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfVFJJRyA9IDEwLFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfTVUgPSAxMSxcbiYjNDM7XHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUiA9IDEzLFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUcgPSAxNCxcbiYjNDM7XHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9NVSA9IDE1LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSB7XG4mIzQzO1x0VU5JX0NNRF9NSUJfREFUQSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gc3RhdHNfcXVlcnlfbWliX2FycmF5X2luZGV4IHtcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1JYX0ZDU19FUlIgPSAwLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfUlhfRklGT19PVkVSRkxPVyxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1JYX01QRFUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1BGX0RST1AsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9DSEFOTkVMX0lETEUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9NRFJEWSxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfUlhfT0ZETV9MR19NSVhFRF9NRFJEWV9USU1FLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfUF9DQ0FfVElNRSxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1NfQ0NBX1RJTUUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9QX0VEX1RJTUUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9CQ05fVFgsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9UWF9CV180ME1IWixcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1RYX0JXXzgwTUhaLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfVFhfQldfMTYwTUhaLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQlNTMF9CQV9NSVNTLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMixcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX0FNUERVLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQU1QRFVfTVBEVSxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX0FNUERVX0FDS0VELFxuJiM0MztcdFFVRVJZX01JQl9DTlRfTUFYX05VTSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gc3RhdHNfdHJ4X2FnZ19yYW5nZSB7XG4mIzQzO1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UwX0lEWCxcbiYjNDM7XHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTFfSURYLFxuJiM0MztcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFMl9JRFgsXG4mIzQzO1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UzX0lEWCxcbiYjNDM7XHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTRfSURYLFxuJiM0MztcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFNV9JRFgsXG4mIzQzO1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U2X0lEWCxcbiYjNDM7XHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTdfSURYLFxuJiM0MztcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdE1UNzkyNV9CV18yMCA9IDAsXG4mIzQzO1x0TVQ3OTI1X0JXXzQwLFxuJiM0MztcdE1UNzkyNV9CV184MCxcbiYjNDM7XHRNVDc5MjVfQldfMTYwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfYWMge1xuJiM0MztcdF9fbGUzMiB0eF9mYWlsO1xuJiM0MztcdF9fbGUzMiB0eF9yZXRyeTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX3R4X3ZlY3RvciB7XG4mIzQzO1x0X19sZTMyIHR4dlszXTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX21pYiB7XG4mIzQzO1x0X19sZTMyIHJ4X21wZHVfY250O1xuJiM0MztcdF9fbGUzMiBmY3NfZXJyb3I7XG4mIzQzO1x0X19sZTMyIHJ4X2ZpZm9fZnVsbDtcbiYjNDM7XHRfX2xlMzIgYW1wZHVfdHhfc2ZfY250O1xuJiM0MztcdF9fbGUzMiBhbXBkdV90eF9hY2tfc2ZfY250O1xuJiM0MztcdF9fbGUzMiB0eF9yYW5nZV9hbXBkdV9jbnRbTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNXTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qIEZpcm13YXJlIEVWRU5UX1NUQV9TVEFUSVNUSUNTIGJvZHkuICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzIHtcbiYjNDM7XHR1OCB2ZXJzaW9uO1xuJiM0MztcdHU4IHJzdlszXTtcbiYjNDM7XHRfX2xlMzIgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHU4IHN0YV9pZHg7XG4mIzQzO1x0dTggYnNzX2lkeDtcbiYjNDM7XHR1OCB3dGJsX2lkeDtcbiYjNDM7XHR1OCByc3YxO1xuJiM0MztcbiYjNDM7XHR1OCBtYWNfYWRkcltFVEhfQUxFTl07XG4mIzQzO1x0dTggcGVyO1xuJiM0MztcdHU4IHJjcGk7XG4mIzQzO1xuJiM0MztcdF9fbGUzMiBwaHlfbW9kZTtcbiYjNDM7XHRfX2xlMTYgbGlua19zcGVlZDsgLyogMC41IE1iaXQvcyB1bml0cyAqL1xuJiM0MztcdHU4IGxpbmtfcXVhbGl0eTtcbiYjNDM7XHR1OCBsaW5rX3Jlc2VydmVkO1xuJiM0MztcbiYjNDM7XHRfX2xlMzIgdHhfY291bnQ7XG4mIzQzO1x0X19sZTMyIHR4X2ZhaWxfY291bnQ7XG4mIzQzO1x0X19sZTMyIHR4X2xpZmVfdGltZW91dF9jb3VudDtcbiYjNDM7XHRfX2xlMzIgdHhfZG9uZV9haXJfdGltZTtcbiYjNDM7XHRfX2xlMzIgdHJhbnNtaXRfY291bnQ7XG4mIzQzO1x0X19sZTMyIHRyYW5zbWl0X2ZhaWxfY291bnQ7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2FjIGFjW01UNzkyNV9TVEFfU1RBVFNfQUNfTlVNXTtcbiYjNDM7XG4mIzQzO1x0dTggdGVtcGVyYXR1cmU7XG4mIzQzO1x0dTggc2tpcF9hcjtcbiYjNDM7XHR1OCBhcl90YWJsZV9pZHg7XG4mIzQzO1x0dTggcmF0ZV9lbnRyeV9pZHg7XG4mIzQzO1x0dTggcmF0ZV9lbnRyeV9pZHhfcHJldjtcbiYjNDM7XHR1OCB0eF9zZ2lfZGV0ZWN0X3Bhc3NfY250O1xuJiM0MztcdHU4IGF2ZV9wZXI7XG4mIzQzO1x0dTggcnN2MjtcbiYjNDM7XG4mIzQzO1x0X19sZTMyIGFnZ19yYW5nZV9jdHJsWzJdO1xuJiM0MztcdHU4IHJhbmdlX21vZGU7XG4mIzQzO1x0dTggcnN2M1szXTtcbiYjNDM7XHRfX2xlMzIgYWdnX3JhbmdlX2N0cmxfZXh0WzZdO1xuJiM0MztcbiYjNDM7XHR1OCBhcl9zdGF0ZV9jdXJyO1xuJiM0MztcdHU4IGFyX3N0YXRlX3ByZXY7XG4mIzQzO1x0dTggYXJfYWN0aW9uX3R5cGU7XG4mIzQzO1x0dTggaGlnaGVzdF9yYXRlX2NudDtcbiYjNDM7XHR1OCBsb3dlc3RfcmF0ZV9jbnQ7XG4mIzQzO1x0dTggcnN2NDtcbiYjNDM7XHRfX2xlMTYgdHJhaW5fdXA7XG4mIzQzO1x0X19sZTE2IHRyYWluX2Rvd247XG4mIzQzO1x0dTggcnN2NVsyXTtcbiYjNDM7XHRfX2xlMzIgcmF0ZTFfdHhfY250O1xuJiM0MztcdF9fbGUzMiByYXRlMV9mYWlsX2NudDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfdHhfdmVjdG9yIHR4X3ZlY3RvcltNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNXTtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19taWIgbWliW01UNzkyNV9TVEFfU1RBVFNfQkFORF9OVU1dO1xuJiM0MztcbiYjNDM7XHR1OCBpc19mb3JjZV90eF9zdHJlYW07XG4mIzQzO1x0dTggaXNfZm9yY2Vfc2Vfb2ZmO1xuJiM0MztcdF9fbGUxNiByYV9ydW5uaW5nX2NudDtcbiYjNDM7XHR1OCByYV9zdGF0dXM7XG4mIzQzO1x0dTggbWF4X2FtcGR1X2ZhY3RvcjtcbiYjNDM7XHR1OCB0eF9xdWFsaXR5W01UNzkyNV9TVEFfU1RBVFNfVFhfUVVBTElUWV9OVU1dO1xuJiM0MztcdHU4IHR4X3JhdGVfdXBfcGVuYWx0eTtcbiYjNDM7XHR1OCBsb3dfdHJhZmZpY19tb2RlO1xuJiM0MztcdHU4IGxvd190cmFmZmljX2NvdW50O1xuJiM0MztcdHU4IGxvd190cmFmZmljX2Rhc2hib2FyZDtcbiYjNDM7XHR1OCBkeW5hbWljX3NnaV9zdGF0ZTtcbiYjNDM7XHR1OCBkeW5hbWljX3NnaV9zY29yZTtcbiYjNDM7XHR1OCBkeW5hbWljX2J3X3N0YXRlO1xuJiM0MztcdHU4IGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlO1xuJiM0MztcdHU4IHZodF9ub25fc3BfcmF0ZV9zdGF0ZTtcbiYjNDM7XHR1OCByc3Y2WzNdO1xuJiM0MztcdHU4IHJzdjdbMl07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwIHtcbiYjNDM7XHRpbnQgc3RhX3JlY19pZHg7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBGaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgc25hcHNob3QsIG1pcnJvciBHZW40bSBzdHJ1Y3QgVU5JX0VWRU5UX1NUQVRfV1RCTC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGZpcm13YXJlIFJBIG1haW50YWlucyB1cCB0byBNVDc5MjVfQVVUT19SQVRFX05VTSBjYW5kaWRhdGUgcmF0ZXMgaW5cbiYjNDM7ICogcmF0ZV9jb2RlW10uIHJhdGVfaWR4IHRlbGxzIHdoaWNoIGVudHJ5IGlzIGN1cnJlbnRseSBpbiB1c2UsIHNvIGEgZHVtcCBjYW5cbiYjNDM7ICogcG9pbnQgYXQgaXQgd2l0aCBcJiMzNDstLVx1MDAzZVwmIzM0Oy4gZmNhcCBpcyB0aGUgYmFuZHdpZHRoIGNhcGFiaWxpdHkgYW5kIHRoZSBsZHBjL3NnaVxuJiM0MzsgKiBmbGFncyBkZXNjcmliZSB0aGUgcGVyLW1vZGUgY29kaW5nL2d1YXJkLWludGVydmFsIHVzZWQgZm9yIHRob3NlIHJhdGVzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG10NzkyNV93dGJsX3JhdGUge1xuJiM0MztcdF9fbGUxNiB0YWc7XG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHR1OCByeF9yY3BpMDtcbiYjNDM7XHR1OCByeF9yY3BpMTtcbiYjNDM7XHR1OCBjYnJuO1xuJiM0MztcdHU4IGZjYXA7XG4mIzQzO1x0dTggc3BlX2lkeDtcbiYjNDM7XHR1OCBnMjtcdFx0XHQvKiBTR0kgZW5hYmxlZCwgbm9uLUhFLCBCVzIwICovXG4mIzQzO1x0dTggZzQ7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlc0MCAqL1xuJiM0MztcdHU4IGc4O1x0XHRcdC8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXODAgKi9cbiYjNDM7XHR1OCBnMTY7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlcxNjAgKi9cbiYjNDM7XHR1OCBnMl9oZTtcdFx0LyogR0ksIEhFLCBCVzIwICovXG4mIzQzO1x0dTggZzRfaGU7XHRcdC8qIEdJLCBIRSwgQlc0MCAqL1xuJiM0MztcdHU4IGc4X2hlO1x0XHQvKiBHSSwgSEUsIEJXODAgKi9cbiYjNDM7XHR1OCBnMTZfaGU7XHRcdC8qIEdJLCBIRSwgQlcxNjAgKi9cbiYjNDM7XHR1OCBnaV9laHQ7XHRcdC8qIEdJLCBFSFQgKi9cbiYjNDM7XHR1OCBodF9sZHBjO1xuJiM0MztcdHU4IHZodF9sZHBjO1xuJiM0MztcdHU4IGhlX2xkcGM7XG4mIzQzO1x0dTggZWh0X2xkcGM7XG4mIzQzO1x0dTggYWY7XG4mIzQzO1x0dTggcmF0ZV9pZHg7XHRcdC8qIGluZGV4IGludG8gcmF0ZV9jb2RlW10gY3VycmVudGx5IGluIHVzZSAqL1xuJiM0MztcdF9fbGUxNiByYXRlX2NvZGVbTVQ3OTI1X0FVVE9fUkFURV9OVU1dO1xuJiM0MztcdF9fbGUzMiByc3ZbNF07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7bXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqc3RhX3JlY19pZHgpO1xuJiM0MztcbiYjNDM7dm9pZFxuJiM0MzttdDc5MjVfcHJpbnRfbGFzdF90eF9yYXRlKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3QgX19sZTMyIGxlX3R4dlszXSk7XG4mIzQzO1xuJiM0Mzt1OFxuJiM0MzttdDc5MjVfd3RibF9nZXRfc2dpKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlLCB1OCBmY2FwKTtcbiYjNDM7XG4mIzQzO3U4XG4mIzQzO210NzkyNV93dGJsX2dldF9sZHBjKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlKTtcbiYjNDM7XG4mIzQzO2NoYXIgKm10NzkyNV9od19yYXRlX29mZG1fc3RyKHU4IG9mZG1faWR4KTtcbiYjNDM7XG4mIzQzO2ludCBtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTE2IHdsYW5faWR4LFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICpyYXRlKTtcbiYjNDM7XG4mIzQzO2ludCBtdDc5MnhfbWN1X2dldF9zdGF0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cyk7XG4mIzQzO1xuJiM0MztpbnQgbXQ3OTI1X21jdV9nZXRfbWliX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKmNvdW50ZXJzLCB1OCBjb3VudGVyX251bSxcbiYjNDM7XHRcdFx0ICAgIHU2NCAqdmFsdWVzKTtcbiYjNDM7XG4mIzQzOy8qIEdFVF9TVEFUX0lORk8gKFVOSV9DTURfSURfR0VUX1NUQVRJU1RJQ1MgPSAweDIzKSxcbiYjNDM7ICogc3ViLWNvbW1hbmQgVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19RVUFMSVRZID0gMS5cbiYjNDM7ICpcbiYjNDM7ICogQGJhbmRfaWR4OiAgICAgICAgICAgIGJhbmQvQlNTIGluZGV4ICgwLi4zKVxuJiM0MzsgKiBAcnNzaTogICAgICAgICAgICAgICAgb3V0LCBtb3ZpbmctYXZlcmFnZSBiZWFjb24gUlNTSSAoZEJtKSwgbWF5IGJlIE5VTExcbiYjNDM7ICogQHR4X2xpbmtfc3BlZWRfa2JwczogIG91dCwgVFggbGluayBzcGVlZCBpbiBrYml0L3MsIG1heSBiZSBOVUxMXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PRU5UIGlmIHRoZSBiYW5kJiMzOTtzIGxpbmsgcXVhbGl0eSBpcyBub3QgcmVhZHkuXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IGZpcm13YXJlIHByb3ZpZGVzIG9ubHkgUlNTSSBhbmQgVFggcmF0ZSBoZXJlLiBSWCByYXRlL2JhbmR3aWR0aCBhcmVcbiYjNDM7ICogbm90IGluIHRoaXMgZXZlbnQ7IHJlYWQgd2NpZC1cdTAwM2VyYXRlIGZvciB0aGUgUlggcmF0ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4mIzQzO1x0XHRcdFx0czggKnJzc2ksIHUzMiAqdHhfbGlua19zcGVlZF9rYnBzKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkZWJ1Z2ZzIGVudHJ5IHRvIHF1ZXJ5IGFuZCBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlLiBJdCBpcyBhIGRpYWdub3N0aWMvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZTVkYjViZDFkM2NjZWM0OThiYTIyODQ3MmU3MWI0NjhhYWI0ZGI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMDk6MTI6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaAppbmRleCAwZWRlZGE1NjllOWE1Li5iZjBmMTA1Yzc4NmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgKQEAgLTE0ODMsNiAmIzQzOzE0ODMsMTc5IEBAIGVudW0gewogCU1UX05JQ19DQVBfRU1MX0NBUCA9IDB4MjIsCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19CQVNJQyA9IDAsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkgPSAxLAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfU1RBID0gMiwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0JVR19SRVBPUlQgPSAzLAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfVFhfU1RBVFMgPSA0LAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQUxMX1NUQVRTID0gNSwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0VNTF9TVEFUUyA9IDYsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19SRUdVTEFSX1NUQVRTID0gNywKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0JTU19MSU5LX1FVQUxJVFkgPSA4LAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTUxfQ0hOTF9DT05EID0gOSwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgPSAxMCwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfTEFZRVJfU1RBVFMgPSAxMjgsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19QUERVX0xBVEVOQ1kgPSAxMjksCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19DVVJSRU5UX1RYX1JBVEUgPSAxMzAsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19TRVRfVFhfQklUUkFURV9NT05JVE9SID0gMTMxLAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfR0VUX1BSRURJQ1RfVFhfQklUUkFURSA9IDEzMiwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9BVFBTX1RZUEVfUkFURV9NT0RFID0gMTMzLAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfU0VUX0JFQUNPTl9SRVBPUlQgPSAxMzQsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19CU1NfQ1VSUkVOVF9UWF9SQVRFID0gMTM1LAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfR0VUX0JTU19QUkVESUNUX1RYX0JJVFJBVEUgPSAxMzYsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19NQVhfTlVNCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIG10NzkyNV9taWJfY291bnRlciB7CiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9GQ1NfRVJSID0gMCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1cgPSAxLAomIzQzOwlVTklfQ01EX01JQl9DTlRfUlhfTVBEVSA9IDIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCA9IDMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9UT1RBTF9CWVRFID0gNCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX1ZBTElEX0FNUERVX1NGID0gNSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX1ZBTElEX0JZVEUgPSA2LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0hBTk5FTF9JRExFID0gNywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1ZFQ19EUk9QID0gOCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0RFTElNSVRFUl9GQUlMID0gOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1ZFQ19NSVNNQVRDSCA9IDEwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfTURSRFkgPSAxMSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FID0gMTIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUUgPSAxMywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX09GRE1fR1JFRU5fTURSRFlfVElNRSA9IDE0LAomIzQzOwlVTklfQ01EX01JQl9DTlRfUEZfRFJPUCA9IDE1LAomIzQzOwlVTklfQ01EX01JQl9DTlRfTEVOX01JU01BVENIID0gMTYsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9QX0NDQV9USU1FID0gMTcsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX0NDQV9USU1FID0gMTgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUUgPSAxOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1BfRURfVElNRSA9IDIwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkNOX1RYID0gMjEsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9UWF9CV18yME1IWiA9IDIyLAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQldfNDBNSFogPSAyMywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaID0gMjQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9UWF9CV18xNjBNSFogPSAyNSwKJiM0MzsJVU5JX0NNRF9STUFDX0NOVF9PQlNTX0FJUlRJTUUgPSAyNiwKJiM0MzsJVU5JX0NNRF9STUFDX0NOVF9OT05XSUZJX0FJUlRJTUUgPSAyNywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0RVUl9DTlQgPSAyOCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0RVUl9DTlQgPSAyOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JBX0NOVCA9IDMwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfTUFDMlBIWV9UWF9USU1FID0gMzEsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9PVVRfT0ZfUkFOR0VfQ09VTlQgPSAzMiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0lCRl9UWCA9IDMzLAomIzQzOwlVTklfQ01EX01JQl9DTlRfRUJGX1RYID0gMzQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9NVUJGX1RYID0gMzUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CRl9WSFRGQksgPSAzNiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0JGX0hURkJLID0gMzcsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CRl9IRUZCSyA9IDM4LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19CRlBPTExfVFJJID0gMzksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX1RSSSA9IDQwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9SWF9GQktDUUkgPSA0MSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JGRUVfUlhfTkRQID0gNDIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CRl9JQkZfVVBUID0gNDMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CRl9FQkZfVVBUID0gNDQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CRkVFX1NQX0FCT1JUID0gNDUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CRkVFX1RCX0xFTl9FUlIgPSA0NiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JGRUVfVFhGQktfTVVURSA9IDQ3LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9UTUFDX0FCT1JUID0gNDgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX0NQTCA9IDQ5LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9DT0FOVF9CTEtUWCA9IDUwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9GQktfU0VHID0gNTEsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9OQVZfVElNRSA9IDUyLAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMSA9IDUzLAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMCA9IDU0LAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMyA9IDU1LAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMiA9IDU2LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05UID0gNTcsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MxX1JUU19UWF9DTlQgPSA1OCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzJfUlRTX1RYX0NOVCA9IDU5LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTM19SVFNfVFhfQ05UID0gNjAsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX1JUU19SRVRSWSA9IDYxLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMV9SVFNfUkVUUlkgPSA2MiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzJfUlRTX1JFVFJZID0gNjMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MzX1JUU19SRVRSWSA9IDY0LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMF9CQV9NSVNTID0gNjUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MxX0JBX01JU1MgPSA2NiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzJfQkFfTUlTUyA9IDY3LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTM19CQV9NSVNTID0gNjgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0FDS19GQUlMID0gNjksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MxX0FDS19GQUlMID0gNzAsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MyX0FDS19GQUlMID0gNzEsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MzX0FDS19GQUlMID0gNzIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZID0gNzMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MxX0ZSQU1FX1JFVFJZID0gNzQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MyX0ZSQU1FX1JFVFJZID0gNzUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MzX0ZSQU1FX1JFVFJZID0gNzYsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIgPSA3NywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzFfRlJBTUVfUkVUUllfMiA9IDc4LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMl9GUkFNRV9SRVRSWV8yID0gNzksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MzX0ZSQU1FX1JFVFJZXzIgPSA4MCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0ExX1NFQVJDSCA9IDgxLAomIzQzOwlVTklfQ01EX01JQl9DTlRfUlhfRFJPUF9NUERVID0gODIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9VTldBTlRFRCA9IDgzLAomIzQzOwlVTklfQ01EX01JQl9DTlRfUlhfRkNTX09LID0gODQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TVV9UWF9PSyA9IDg1LAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfRlVMTF9CVyA9IDg2LAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQVVUT19CVyA9IDg3LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0NBX1NBTVBMRV9JRExFID0gODgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9DQ0FfU0FNUExFX0FDVElWRSA9IDg5LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0NBX1RJTUUgPSA5MCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfMjBCV19DQ0FfVElNRSA9IDkxLAomIzQzOwlVTklfQ01EX01JQl9DTlRfU180MEJXX0NDQV9USU1FID0gOTIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TXzgwQldfQ0NBX1RJTUUgPSA5MywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfMTYwQldfQ0NBX1RJTUUgPSA5NCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMF9FRF9USU1FID0gOTUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzFfRURfVElNRSA9IDk2LAomIzQzOwlVTklfQ01EX01JQl9DTlRfU19QMjBCV18yX0VEX1RJTUUgPSA5NywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfM19FRF9USU1FID0gOTgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzRfRURfVElNRSA9IDk5LAomIzQzOwlVTklfQ01EX01JQl9DTlRfU19QMjBCV181X0VEX1RJTUUgPSAxMDAsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzZfRURfVElNRSA9IDEwMSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfN19FRF9USU1FID0gMTAyLAomIzQzOwlVTklfQ01EX01JQl9DTlRfU19QMjBCV184X0VEX1RJTUUgPSAxMDMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzlfRURfVElNRSA9IDEwNCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTBfRURfVElNRSA9IDEwNSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTFfRURfVElNRSA9IDEwNiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTJfRURfVElNRSA9IDEwNywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTNfRURfVElNRSA9IDEwOCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTRfRURfVElNRSA9IDEwOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTVfRURfVElNRSA9IDExMCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0JXXzMyME1IWiA9IDExMSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0RETE1UX1JORzAgPSAxMTIsIC8qIFJuZzB+Um5nNCAxMTJ+MTE2ICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzMgPSAxMTcsIC8qIDExN34xMjAgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfVFggPSAxMjEsIC8qIDEyMX4xMjQgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfVFhfREFUQSA9IDEyNSwgLyogMTI1fjEyOCAqLwomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMF9UWF9CWVRFID0gMTI5LCAvKiAxMjl+MTMyICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9PS19CU1MwID0gMTMzLCAvKiAxMzN+MTM2ICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CWVRFX0JTUzAgPSAxMzcsIC8qIDEzN34xNDAgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0RBVEFfQlNTMCA9IDE0MSwgLyogMTQxfjE0NCAqLwomIzQzOwlVTklfQ01EX01JQl9DTlRfTUJTUzBfVFhfT0sgPSAxNDUsIC8qIDE0NX4xNjAgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX01CU1MwX1RYX0JZVEUgPSAxNjEsIC8qIDE2MX4xNzYgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX09LX01CU1MwID0gMTc3LCAvKiAxNzd+MTkyICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CWVRFX01CU1MwID0gMTkzLCAvKiAxOTN+MjA4ICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVSA9IDIwOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0FNUERVX01QRFUgPSAyMTAsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVV9BQ0tFRCA9IDIxMSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX01BWF9OVU0KJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gRU5VTV9VTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBRyB7CiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JBU0lDID0gMCwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19RVUFMSVRZID0gMSwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfU1RBID0gMiwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlVHX1JFUE9SVCA9IDMsCiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0VNTF9TVEFUUyA9IDYsCiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1JFR1VMQVJfU1RBVFMgPSA3LAomIzQzOwlVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CU1NfTElOS19RVUFMSVRZID0gOCwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfR0VUX01MX0NITkxfQ09ORCA9IDksCiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1NUQVRfV1RCTCA9IDEwLAomIzQzOwlVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19MSU5LX0xBWUVSX1NUQVRTID0gMHg4MCwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfUFBEVV9MQVRFTkNZLAomIzQzOwlVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19DVVJSRU5UX1RYX1JBVEUsCiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JFQUNPTl9SRVBPUlQgPSAweDg2LAomIzQzOwlVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CU1NfQ1VSUkVOVF9UWF9SQVRFID0gMHg4NywKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX1BSRURfVFhfQklUUkFURSA9IDB4ODgsCiYjNDM7fTsKJiM0MzsKICNkZWZpbmUgVU5JX1dPV19ERVRFQ1RfVFlQRV9NQUdJQwkJQklUKDApCiAjZGVmaW5lIFVOSV9XT1dfREVURUNUX1RZUEVfQU5ZCQkJQklUKDEpCiAjZGVmaW5lIFVOSV9XT1dfREVURUNUX1RZUEVfRElTQ09OTkVDVAkJQklUKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlCmluZGV4IGY5ZGNjMGJiYTM5M2MuLjM4NjNhODliODk3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlCkBAIC00LDcgJiM0Mzs0LDcgQEAgb2JqLSQoQ09ORklHX01UNzkyNV9DT01NT04pICYjNDM7PSBtdDc5MjUtY29tbW9uLm8KIG9iai0kKENPTkZJR19NVDc5MjVFKSAmIzQzOz0gbXQ3OTI1ZS5vCiBvYmotJChDT05GSUdfTVQ3OTI1VSkgJiM0Mzs9IG10NzkyNXUubwogCi1tdDc5MjUtY29tbW9uLXkgOj0gbWFjLm8gbWN1Lm8gcmVnZC5vIG1haW4ubyBpbml0Lm8gZGVidWdmcy5vIG5hbi5vCiYjNDM7bXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ubyBzdGF0cy5vCiBtdDc5MjUtY29tbW9uLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpICYjNDM7PSB0ZXN0bW9kZS5vCiBtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3UubwogbXQ3OTI1dS15IDo9IHVzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMKaW5kZXggZDAxZmY0OWRlNDdhZi4uN2E0MGQ1YWM0N2RhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuYwpAQCAtMSw4ICYjNDM7MSwxMSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhcgogLyogQ29weXJpZ2h0IChDKSAyMDIzIE1lZGlhVGVrIEluYy4gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYXRoNjQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7bXQ3OTI1LmgmIzM0OwogI2luY2x1ZGUgJiMzNDttY3UuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzdGF0cy5oJiMzNDsKIAogc3RhdGljIGludAogbXQ3OTI1X3JlZ19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKQEAgLTI4Niw2ICYjNDM7Mjg5LDM0NiBAQCBzdGF0aWMgaW50IG10NzkyNV9jaGlwX3Jlc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiAKIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgJiMzNDslbGxkXG4mIzM0Oyk7CiAKJiM0MztzdGF0aWMgY29uc3QgdTMyIHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVyc1tdID0gewomIzQzOwlVTklfQ01EX01JQl9DTlRfUlhfRkNTX0VSUiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1csCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9NUERVLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9QRl9EUk9QLAomIzQzOwlVTklfQ01EX01JQl9DTlRfTEVOX01JU01BVENILAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0hBTk5FTF9JRExFLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FLAomIzQzOwlVTklfQ01EX01JQl9DTlRfTURSRFksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX09GRE1fR1JFRU5fTURSRFlfVElNRSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1BfQ0NBX1RJTUUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX0NDQV9USU1FLAomIzQzOwlVTklfQ01EX01JQl9DTlRfUF9FRF9USU1FLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkNOX1RYLAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQldfNDBNSFosCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9UWF9CV184ME1IWiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0JXXzE2ME1IWiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfQkFfTUlTUywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUlksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX1JUU19SRVRSWSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfQUNLX0ZBSUwsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0FNUERVX01QRFUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVV9BQ0tFRCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIER1bXAgdGhlIHdob2xlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSBhbmQgbWFyayB0aGUgZW50cnkgY3VycmVudGx5IGluIHVzZQomIzQzOyAqIHdpdGggJiMzNDstLSZndDsmIzM0OwomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7bXQ3OTI1X2R1bXBfYXV0b19yYXRlX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqcywKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyKQomIzQzO3sKJiM0MzsJdTggZmNhcCA9IHdyLSZndDtmY2FwOwomIzQzOwl1OCByYXRlX2lkeCA9IHdyLSZndDtyYXRlX2lkeDsKJiM0MzsJdTggY2JybiA9IHdyLSZndDtjYnJuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBDdXIgUmF0ZSBJbmRleCA9ICV1XG4mIzM0OywgJiMzNDsgJiMzNDssIHJhdGVfaWR4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1UNzkyNV9BVVRPX1JBVEVfTlVNOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTE2IHJhdGVfY29kZSA9IGxlMTZfdG9fY3B1KHdyLSZndDtyYXRlX2NvZGVbaV0pOwomIzQzOwkJdTggdHhtb2RlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTU9ERShyYXRlX2NvZGUpOwomIzQzOwkJdTggcmF0ZSA9IE1UNzkyNV9IV19SQVRFX1RPX01DUyhyYXRlX2NvZGUpOwomIzQzOwkJdTggbnN0cyA9IE1UNzkyNV9IV19SQVRFX1RPX05TUyhyYXRlX2NvZGUpICYjNDM7IDE7CiYjNDM7CQl1OCBzdGJjID0gTVQ3OTI1X0hXX1JBVEVfVE9fU1RCQyhyYXRlX2NvZGUpOwomIzQzOwkJdTggZGNtID0gTVQ3OTI1X0hXX1JBVEVfVE9fRENNKHJhdGVfY29kZSk7CiYjNDM7CQl1OCBlcnN1MTA2dCA9IE1UNzkyNV9IV19SQVRFX1RPXzEwNlQocmF0ZV9jb2RlKTsKJiM0MzsJCXU4IHNnaSA9IG10NzkyNV93dGJsX2dldF9zZ2kod3IsIHR4bW9kZSwgZmNhcCk7CiYjNDM7CQl1OCBsZHBjID0gbXQ3OTI1X3d0YmxfZ2V0X2xkcGMod3IsIHR4bW9kZSk7CiYjNDM7CQljb25zdCBjaGFyICptb2RlX3N0ciA9ICYjMzQ7Ti9BJiMzNDs7CiYjNDM7CiYjNDM7CQlpZiAoZGNtKQomIzQzOwkJCXJhdGUgPSBNVDc5MjVfSFdfUkFURV9VTk1BU0tfRENNKHJhdGUpOwomIzQzOwkJaWYgKGVyc3UxMDZ0KQomIzQzOwkJCXJhdGUgPSBNVDc5MjVfSFdfUkFURV9VTk1BU0tfMTA2VChyYXRlKTsKJiM0MzsKJiM0MzsJCWlmICh0eG1vZGUgJmx0OyBBUlJBWV9TSVpFKG10NzkyNV90eF9tb2RlX3N0cikpCiYjNDM7CQkJbW9kZV9zdHIgPSBtdDc5MjVfdHhfbW9kZV9zdHJbdHhtb2RlXTsKJiM0MzsKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDtSYXRlIGluZGV4WyVkXSAgICAlcyYjMzQ7LCBpLAomIzQzOwkJCSAgIHJhdGVfaWR4ID09IGkgPyAmIzM0Oy0tJmd0OyAmIzM0OyA6ICYjMzQ7ICAgICYjMzQ7KTsKJiM0MzsKJiM0MzsJCS8qIHJhdGUvTUNTIGZpZWxkICovCiYjNDM7CQlpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKQomIzQzOwkJCXNlcV9wcmludGYocywgJiMzNDslcywgJiMzNDssCiYjNDM7CQkJCSAgIG10NzkyNV90eF9yYXRlX2Nja19zdHJbcmF0ZSAmYW1wOyAweDNdKTsKJiM0MzsJCWVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pCiYjNDM7CQkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywgbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIocmF0ZSkpOwomIzQzOwkJZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHwKJiM0MzsJCQkgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRikKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7TUNTJWQsICYjMzQ7LCByYXRlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMlZF9NQ1MlZCwgJiMzNDssCiYjNDM7CQkJCSAgIHN0YmMgPyAmIzM0O05TVFMmIzM0OyA6ICYjMzQ7TlNTJiMzNDssIG5zdHMsIHJhdGUpOwomIzQzOwomIzQzOwkJLyogYmFuZHdpZHRoOiBtaXJyb3IgdGhlIENDSy9PRkRNIC0mZ3Q7IEJXMjAgYW5kIGNicm4gaGFuZGxpbmcgKi8KJiM0MzsJCWlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHwKJiM0MzsJCSAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKQomIzQzOwkJCXNlcV9wcmludGYocywgJiMzNDslcywgJiMzNDssIG10NzkyNV90eF9yYXRlX2J3X3N0clswXSk7CiYjNDM7CQllbHNlIGlmIChpICZndDsgY2JybikKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LAomIzQzOwkJCQkgICBmY2FwICZsdDsgNSA/CiYjNDM7CQkJCSAgIChmY2FwICZndDsgTVQ3OTI1X0JXXzIwID8KJiM0MzsJCQkJICAgIG10NzkyNV90eF9yYXRlX2J3X3N0cltmY2FwIC0gMV0gOgomIzQzOwkJCQkgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXBdKSA6CiYjNDM7CQkJCSAgIG10NzkyNV90eF9yYXRlX2J3X3N0cls1XSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywKJiM0MzsJCQkJICAgZmNhcCAmbHQ7IDUgPyBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0gOgomIzQzOwkJCQkgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbNV0pOwomIzQzOwomIzQzOwkJLyogR0kgLyBwcmVhbWJsZSAqLwomIzQzOwkJaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSykKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LCByYXRlICZsdDsgNCA/ICYjMzQ7TFAmIzM0OyA6ICYjMzQ7U1AmIzM0Oyk7CiYjNDM7CQllbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKQomIzQzOwkJCTsgLyogT0ZETSBoYXMgbm8gR0kvcHJlYW1ibGUgdG8gcHJpbnQgKi8KJiM0MzsJCWVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8CiYjNDM7CQkJIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YgfHwKJiM0MzsJCQkgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfVkhUIHx8CiYjNDM7CQkJIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1BMUikKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LCBzZ2kgPT0gMCA/ICYjMzQ7TEdJJiMzNDsgOiAmIzM0O1NHSSYjMzQ7KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LAomIzQzOwkJCQkgICBzZ2kgPT0gMCA/ICYjMzQ7U0dJJiMzNDsgOgomIzQzOwkJCQkgICAoc2dpID09IDEgPyAmIzM0O01HSSYjMzQ7IDogJiMzNDtMR0kmIzM0OykpOwomIzQzOwomIzQzOwkJLyogbW9kZSwgRENNLCAxMDZ0LCBTVEJDLCBjb2RpbmcgKi8KJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslcyVzJXMlcyVzXG4mIzM0OywKJiM0MzsJCQkgICBtb2RlX3N0ciwKJiM0MzsJCQkgICBkY20gPyAmIzM0OywgRENNJiMzNDsgOiAmIzM0OyYjMzQ7LCBlcnN1MTA2dCA/ICYjMzQ7LCAxMDZ0JiMzNDsgOiAmIzM0OyYjMzQ7LAomIzQzOwkJCSAgIHN0YmMgPyAmIzM0OywgU1RCQywgJiMzNDsgOiAmIzM0OywgJiMzNDssCiYjNDM7CQkJICAgKGxkcGMgPT0gMCB8fAomIzQzOwkJCSAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHwKJiM0MzsJCQkgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSkgPwomIzQzOwkJCSAgICYjMzQ7QkNDJiMzNDsgOiAmIzM0O0xEUEMmIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtdDc5Mnhfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJczggcnNzaSA9IDA7CiYjNDM7CXU4IGJhbmRfaWR4ID0gMDsKJiM0MzsJYm9vbCB3dGJsX3JhdGVfdmFsaWQgPSBmYWxzZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCBpID0gMDsKJiM0MzsJdTMyIHN0YXRzX3ZhbHVlID0gMDsKJiM0MzsJdTMyIHR4X2xpbmtfc3BlZWRfa2JwcyA9IDA7CiYjNDM7CXU2NCB0eF90b3RhbCA9IDA7CiYjNDM7CXU2NCB0eF9mYWlsID0gMDsKJiM0MzsJdTY0IHR4X3BlciA9IDA7CiYjNDM7CXUzMiB0eF9wZXJfcmVtID0gMDsKJiM0MzsJLyogVU5JX0NNRF9NSUJfREFUQSAqLwomIzQzOwl1NjQgbWliX3ZhbHVlc1tBUlJBWV9TSVpFKHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyldOwomIzQzOwlzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHMtJmd0O3ByaXZhdGUpOwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSB3dGJsX3JhdGU7CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cyA9IE5VTEw7CiYjNDM7CiYjNDM7CWJhbmRfaWR4ID0gZGV2LSZndDttcGh5LmJhbmRfaWR4OwomIzQzOwomIzQzOwkgc3RhdHMgPSBremFsbG9jKHNpemVvZigqc3RhdHMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFzdGF0cykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkvKiBHZXQgU1RBX1NUQVRTICovCiYjNDM7CW10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7CiYjNDM7CXJldCA9IG10NzkyeF9tY3VfZ2V0X3N0YXQoZGV2LCBzdGF0cyk7CiYjNDM7CW10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogR2V0IE1JQl9TVEFUUyAqLwomIzQzOwltdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpOwomIzQzOwlyZXQgPSBtdDc5MjVfbWN1X2dldF9taWJfaW5mbyhkZXYsIGJhbmRfaWR4LCBzdGF0c19xdWVyeV9taWJfY291bnRlcnMsCiYjNDM7CQkJCSAgICAgIEFSUkFZX1NJWkUoc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzKSwgbWliX3ZhbHVlcyk7CiYjNDM7CW10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogR2V0IExpbmtfU3BlZWQgYW5kIFJTU0kgKi8KJiM0MzsJbXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTsKJiM0MzsJcmV0ID0gbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5KGRldiwgc3RhdHMtJmd0O2Jzc19pZHgsICZhbXA7cnNzaSwgJmFtcDt0eF9saW5rX3NwZWVkX2ticHMpOwomIzQzOwltdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIEdldCB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIChiZXN0IGVmZm9ydDsgZG8gbm90IGFib3J0IHRoZQomIzQzOwkgKiB3aG9sZSBzdGF0cyBkdW1wIGlmIHRoZSBXVEJMIHF1ZXJ5IGlzIG5vdCBhdmFpbGFibGUpLgomIzQzOwkgKi8KJiM0MzsJbXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTsKJiM0MzsJaWYgKCFtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUoZGV2LCBzdGF0cy0mZ3Q7d3RibF9pZHgsICZhbXA7d3RibF9yYXRlKSkKJiM0MzsJCXd0YmxfcmF0ZV92YWxpZCA9IHRydWU7CiYjNDM7CW10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7CiYjNDM7CiYjNDM7CS8qIFByaW50IFNUQV9TVEFUUyBpbmZvICovCiYjNDM7CXNlcV9wcmludGYocywgJiMzNDsoU1RBKSBjb25uZWN0ZWQgQVAgTUFDIEFkZHJlc3MgPSAlcE1cbiYjMzQ7LCBzdGF0cy0mZ3Q7bWFjX2FkZHIpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEJzc0lkeCA9IFsldV1cbiYjMzQ7LCAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2Jzc19pZHgpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFN0YVJlY0lkeCA9IFsldV1cbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDtzdGFfaWR4KTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBSU1NJID0gJWRcbiYjMzQ7LCAmIzM0OyAmIzM0OywgcnNzaSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgTGlua19TcGVlZCA9ICV1IChrYml0L3MpXG4mIzM0OywgJiMzNDsgJiMzNDssIHR4X2xpbmtfc3BlZWRfa2Jwcyk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgdGVtcGVyYXR1cmUgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O3RlbXBlcmF0dXJlKTsKJiM0MzsKJiM0MzsJc3RhdHNfdmFsdWUgPSBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7dHJhbnNtaXRfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtJmd0O3RyYW5zbWl0X2ZhaWxfY291bnQpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IHN1Y2Nlc3MgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHNfdmFsdWUpOwomIzQzOwomIzQzOwlzdGF0c192YWx1ZSA9IGxlMzJfdG9fY3B1KHN0YXRzLSZndDt0eF9mYWlsX2NvdW50KSAtIGxlMzJfdG9fY3B1KHN0YXRzLSZndDt0eF9saWZlX3RpbWVvdXRfY291bnQpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IGZhaWwgdG8gUmN2IEFDSyBhZnRlciByZXRyeSA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBzdGF0c192YWx1ZSk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUnggTXBkdSA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7bWliW2JhbmRfaWR4XS5yeF9tcGR1X2NudCkpOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4IEZjcyBFcnJvciA9ICV1IChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtJmd0O21pYltiYW5kX2lkeF0uZmNzX2Vycm9yKSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUnggRklGTyBmdWxsID0gJXUgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7bWliW2JhbmRfaWR4XS5yeF9maWZvX2Z1bGwpKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBUUlhfQUdHX1JBTkdFWyVkXSA9ICV1IChQUERVKVxuJiMzNDssCiYjNDM7CQkJICAgJiMzNDsgJiMzNDssIGksIGxlMzJfdG9fY3B1KHN0YXRzLSZndDttaWJbYmFuZF9pZHhdLnR4X3JhbmdlX2FtcGR1X2NudFtpXSkpOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCA9ICV1IChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtJmd0O21pYltiYW5kX2lkeF0uYW1wZHVfdHhfc2ZfY250KSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgTVBEVXMgaW4gQU1QRFVzIHRyYW5zbWl0dGVkIHdpdGggQUNLIHJlcGx5ID0gJXUgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7bWliW2JhbmRfaWR4XS5hbXBkdV90eF9hY2tfc2ZfY250KSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgcmF0ZTFfdHhfY250ID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIGxlMzJfdG9fY3B1KHN0YXRzLSZndDtyYXRlMV90eF9jbnQpKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICByYXRlMV9mYWlsX2NudCA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7cmF0ZTFfZmFpbF9jbnQpKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICB0cmFpbl91cCA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTE2X3RvX2NwdShzdGF0cy0mZ3Q7dHJhaW5fdXApKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICB0cmFpbl9kb3duID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIGxlMTZfdG9fY3B1KHN0YXRzLSZndDt0cmFpbl9kb3duKSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgaXNfZm9yY2VfdHhfc3RyZWFtID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDtpc19mb3JjZV90eF9zdHJlYW0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIGlzX2ZvcmNlX3NlX29mZiA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBzdGF0cy0mZ3Q7aXNfZm9yY2Vfc2Vfb2ZmKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBtYXhfYW1wZHVfZmFjdG9yID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDttYXhfYW1wZHVfZmFjdG9yKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICB0eF9yYXRlX3VwX3BlbmFsdHkgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O3R4X3JhdGVfdXBfcGVuYWx0eSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgbG93X3RyYWZmaWNfbW9kZSA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBzdGF0cy0mZ3Q7bG93X3RyYWZmaWNfbW9kZSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgbG93X3RyYWZmaWNfY291bnQgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2xvd190cmFmZmljX2NvdW50KTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBsb3dfdHJhZmZpY19kYXNoYm9hcmQgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2xvd190cmFmZmljX2Rhc2hib2FyZCk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgZHluYW1pY19zZ2lfc3RhdGUgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2R5bmFtaWNfc2dpX3N0YXRlKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBkeW5hbWljX3NnaV9zY29yZSA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBzdGF0cy0mZ3Q7ZHluYW1pY19zZ2lfc2NvcmUpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIGR5bmFtaWNfYndfc3RhdGUgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2R5bmFtaWNfYndfc3RhdGUpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDtkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgdmh0X25vbl9zcF9yYXRlX3N0YXRlID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDt2aHRfbm9uX3NwX3JhdGVfc3RhdGUpOwomIzQzOwomIzQzOwkvKiBEZWNvZGUgdGhlIFRYIFZlY3RvciBCQlAgbGF0Y2ggdG8gc2hvdyB0aGUgY3VycmVudCBUWCBNQ1MgcmF0ZSAqLwomIzQzOwlpZiAoYmFuZF9pZHggJmx0OyBNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNKQomIzQzOwkJbXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZShzLCBzdGF0cy0mZ3Q7dHhfdmVjdG9yW2JhbmRfaWR4XS50eHYpOwomIzQzOwomIzQzOwkvKiBEdW1wIHRoZSB3aG9sZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgYW5kIG1hcmsgdGhlIGVudHJ5IGN1cnJlbnRseSAqLwomIzQzOwlpZiAod3RibF9yYXRlX3ZhbGlkKQomIzQzOwkJbXQ3OTI1X2R1bXBfYXV0b19yYXRlX3RhYmxlKHMsICZhbXA7d3RibF9yYXRlKTsKJiM0MzsKJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbm1pYiBzdGF0ZTpcbiYjMzQ7KTsKJiM0MzsJLyogPT09UnggUmVsYXRlZCBDb3VudGVycz09PSAqLwomIzQzOwlzZXFfcHV0cyhzLCAmIzM0Oz09PSBSeCBSZWxhdGVkIENvdW50ZXJzID09PVxuJiMzNDspOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4IHdpdGggQ1JDID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9GQ1NfRVJSXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUnggTXBkdSA9ICVsbHUgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfTVBEVV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4IEFNcGR1ID0gJWxsdSAoUFBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVF0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4IFBGIERyb3AgPSAlbGx1IChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1BGX0RST1BdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBSeCBMZW4gTWlzbWF0Y2ggPSAlbGx1IChQUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0xFTl9NSVNNQVRDSF0pOwomIzQzOwomIzQzOwkvKiA9PT1QaHkvVGltaW5nIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi8KJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbj09PSBQaHkvVGltaW5nIFJlbGF0ZWQgQ291bnRlcnMgPT09XG4mIzM0Oyk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgQ2hhbm5lbElkbGVDbnQgPSAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgQ0NBX05BVl9UeF9UaW1lID0gJWxsdVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0NDQV9OQVZfVFhfVElNRV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4X01EUkRZX0NOVCA9ICVsbHUgKFBQRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfTURSRFldKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBDQ0tfTURSRFkgPSAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUVdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBPRkRNX01EUkRZID0gJWxsdVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIE9GRE1fR1JFRU5fTURSRFkgPSAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUHJpbSBDQ0EgVGltZSA9ICVsbHVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0NDQV9USU1FXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgU2VjIENDQSBUaW1lID0gJWxsdVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1NfQ0NBX1RJTUVdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBQcmltIEVEIFRpbWUgPSAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUF9FRF9USU1FXSk7CiYjNDM7CiYjNDM7CS8qID09PVR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYyk9PT0gKi8KJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbj09PSBUeCBSZWxhdGVkIENvdW50ZXJzKEdlbmVyaWMpID09PVxuJiMzNDspOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEJlYWNvblR4Q250ID0gJWxsdVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JDTl9UWF0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IDQwTUh6IENudCA9ICVsbHUgIChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1RYX0JXXzQwTUhaXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgVHggODBNSHogQ250ID0gJWxsdSAgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfODBNSFpdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBUeCAxNjBNSHogQ250ID0gJWxsdSAgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfMTYwTUhaXSk7CiYjNDM7CiYjNDM7CS8qID09PUJTU0lEWzBdIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi8KJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbj09PSBCU1NJRFswXSBSZWxhdGVkIENvdW50ZXJzID09PVxuJiMzNDspOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEJBIE1pc3MgQ250ID0gJWxsdSAgKFBQRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9CQV9NSVNTXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUlRTIFR4IENudCA9ICVsbHUgIChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVF0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEZyYW1lIFJldHJ5IENudCA9ICVsbHUgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEZyYW1lIFJldHJ5IDIgQ250ID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzJdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBSVFMgUmV0cnkgQ250ID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX1JUU19SRVRSWV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEFjayBGYWlsZWQgQ250ID0gJWxsdSAoUFBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0FDS19GQUlMXSk7CiYjNDM7CiYjNDM7CS8qID09PUFNUERVIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi8KJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbj09PSBBTVBEVSBSZWxhdGVkIENvdW50ZXJzID09PVxuJiMzNDspOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IEFNUERVX1BrdF9DbnQgPSAlbGx1ICAoUFBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IEFNUERVX01QRFVfUGt0X0NudCA9ICVsbHUgIChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0FNUERVX01QRFVdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBBTVBEVSBUeCBzdWNjZXNzID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF0pOwomIzQzOwomIzQzOwl0eF90b3RhbCA9IG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVXTsKJiM0MzsJdHhfZmFpbCA9ICBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV0gLSBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfQUNLRURdOwomIzQzOwl0eF9wZXIgPSB0eF90b3RhbCA9PSAwID8gMCA6IGRpdjY0X3U2NCgxMDAwICogdHhfZmFpbCwgdHhfdG90YWwpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEFNUERVIFR4IGZhaWwgY291bnQgICA9ICVsbHUgIChNUERVKSwgUEVSPSVsbHUuJTFsbHUlJVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywKJiM0MzsJCSAgIHR4X2ZhaWwsCiYjNDM7CQkgICBkaXZfdTY0X3JlbSh0eF9wZXIsIDEwLCAmYW1wO3R4X3Blcl9yZW0pLCAodTY0KXR4X3Blcl9yZW0pOwomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUoc3RhdHMpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGlyOwpAQCAtMzEzLDUgJiM0Mzs2NTYsOCBAQCBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KQogCQkJCSAgICBtdDc5MnhfcG1fc3RhdHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtkZWVwLXNsZWVwJiMzNDssIDA2MDAsIGRpciwgZGV2LCAmYW1wO2ZvcHNfZHMpOwogCiYjNDM7CWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtJmd0O210NzYuZGV2LCAmIzM0O3N0YXRzJiMzNDssIGRpciwKJiM0MzsJCQkJICAgIG10NzkyeF9zdGF0cyk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45YTQ3OTUzMDYyYmMzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuYwpAQCAtMCwwICYjNDM7MSw1ODUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyCiYjNDM7LyogQ29weXJpZ2h0IChDKSAyMDI2IE1lZGlhVGVrIEluYy4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O210NzkyNS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O21jdS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O21hYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3N0YXRzLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19WRVJTSU9OIDEKJiM0MzsjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfVkFMSUQgMVUKJiM0MzsKJiM0MzsjZGVmaW5lIE1UNzkyNV9NSUJfTUFYX0NOVAkJCTMyCiYjNDM7I2RlZmluZSBNVDc5MjVfTUlCX0NOVF9NQVhfTlVNCQk1MTIgIC8qIGZpcm13YXJlIFVOSV9DTURfTUlCX0NOVF9NQVhfTlVNIHVwcGVyIGJvdW5kICovCiYjNDM7CiYjNDM7I2RlZmluZSBNVDc5MjVfTFFfQkFORF9OVU0JNAkJCS8qIExpbmsgcXVhbGl0eSBiYW5kICovCiYjNDM7CiYjNDM7Y29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9tb2RlX3N0cltdID0gewomIzQzOwkmIzM0O0NDSyYjMzQ7LCAmIzM0O09GRE0mIzM0OywgJiMzNDtNTSYjMzQ7LCAmIzM0O0dGJiMzNDssICYjMzQ7VkhUJiMzNDssICYjMzQ7UExSJiMzNDssCiYjNDM7CSYjMzQ7UExSUCYjMzQ7LCAmIzM0O0FMUiYjMzQ7LCAmIzM0O0hFX1NVJiMzNDssICYjMzQ7SEVfRVImIzM0OywgJiMzNDtIRV9UUklHJiMzNDssICYjMzQ7SEVfTVUmIzM0OywKJiM0MzsJJiMzNDtFSFRfRVImIzM0OywgJiMzNDtUT0YmIzM0OywgJiMzNDtFSFRfVFJJRyYjMzQ7LCAmIzM0O0VIVF9NVSYjMzQ7CiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltdID0gewomIzQzOwkmIzM0OzFNJiMzNDssICYjMzQ7Mk0mIzM0OywgJiMzNDs1LjVNJiMzNDssICYjMzQ7MTFNJiMzNDssICYjMzQ7Ti9BJiMzNDsKJiM0Mzt9OwomIzQzOwomIzQzO2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbXSA9IHsKJiM0MzsJJiMzNDtCVzIwJiMzNDssICYjMzQ7Qlc0MCYjMzQ7LCAmIzM0O0JXODAmIzM0OywgJiMzNDtCVzE2MC9CVzgwODAmIzM0OywgJiMzNDtCVzMyMCYjMzQ7LCAmIzM0O04vQSYjMzQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19yZXEgewomIzQzOwl1OCByc3ZbNF07CiYjNDM7CV9fbGUxNiB0YWc7CiYjNDM7CV9fbGUxNiBsZW47CiYjNDM7CXU4IHN0YV9yZWNfaWR4OwomIzQzOwl1OCByc3YxOwomIzQzOwl1OCBsbHNfcmVhZF9jbGVhcjsKJiM0MzsJdTggcmVzZXRfY291bnRlcjsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2V2ZW50IHsKJiM0MzsJdTggcnN2WzRdOwomIzQzOwlfX2xlMTYgdGFnOwomIzQzOwlfX2xlMTYgbGVuOwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyBzdGF0czsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qIFdUQkwgYXV0by1yYXRlIHJlcXVlc3QgVExWLCBtaXJyb3IgR2VuNG0gc3RydWN0IFVOSV9DTURfU1RBVF9XVEJMLgomIzQzOyAqIFRoZSBSQSB0YWcgcmV1c2VzIFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMICgxMCkuCiYjNDM7ICovCiYjNDM7c3RydWN0IG10NzkyNV93dGJsX3JhdGVfcmVxIHsKJiM0MzsJdTggcnN2WzRdOwomIzQzOwlfX2xlMTYgdGFnOwomIzQzOwlfX2xlMTYgbGVuOwomIzQzOwlfX2xlMTYgd2xhbl9pZHg7CiYjNDM7CV9fbGUxNiByc3YxOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyogV1RCTCBhdXRvLXJhdGUgZXZlbnQgVExWLiBGaXJtd2FyZSBhbnN3ZXJzIGNtZCB0YWcgMTAgd2l0aCBldmVudCB0YWcgMTIuICovCiYjNDM7c3RydWN0IG10NzkyNV93dGJsX3JhdGVfZXZlbnQgewomIzQzOwl1OCByc3ZbNF07CiYjNDM7CXN0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHJhdGU7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MzsvKiBmaXhlZCBmaWVsZCwgbWlycm9yIFVOSV8oQ01EfEVWRU5UKV9NSUJfSU5GTyAqLwomIzQzO3N0cnVjdCBtdDc5MjVfbWliX2hkciB7CiYjNDM7CXU4IGJhbmRfaWR4OwomIzQzOwl1OCByc3ZbM107CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MzsvKiBPbmUgcmVxdWVzdGVkL3JldHVybmVkIE1JQiBjb3VudGVyLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBX1QuICovCiYjNDM7c3RydWN0IG10NzkyNV9taWJfZGF0YSB7CiYjNDM7CV9fbGUxNiB0YWc7CS8qIFVOSV8oQ01EfEVWRU5UKV9NSUJfREFUQSA9IDAgKi8KJiM0MzsJX19sZTE2IGxlbjsKJiM0MzsJX19sZTMyIGNvdW50ZXI7CS8qIE1JQiBjb3VudGVyIElEIChlbnVtIG10NzkyNV9taWJfY291bnRlcikgKi8KJiM0MzsJX19sZTY0IGRhdGE7CS8qIG9ubHkgdmFsaWQgb24gZXZlbnQ7IGlnbm9yZWQgb24gY21kICovCiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MzsvKiBwZXItYmFuZCBsaW5rIHF1YWxpdHkgZW50cnksIG1pcnJvciBVTklfTElOS19RVUFMSVRZICovCiYjNDM7c3RydWN0IG10NzkyNV9saW5rX3F1YWxpdHkgewomIzQzOwlzOCByc3NpOwkJLyogbW92aW5nLWF2ZXJhZ2UgYmVhY29uIFJTU0kgb2YgY29ubmVjdGVkIEFQICovCiYjNDM7CXM4IGxpbmtfcXVhbGl0eTsJLyogYWx3YXlzIDAgKi8KJiM0MzsJX19sZTE2IGxpbmtfc3BlZWQ7CS8qIFRYIHJhdGUxLCB1bml0IDUwMCBLYi9zICovCiYjNDM7CXU4IG1lZGl1bV9idXN5X3BjdDsJLyogYWx3YXlzIDAgKi8KJiM0MzsJdTggaXNfcmVhZHk7CQkvKiAwOiBmaWVsZHMgaW52YWxpZCwgMTogdmFsaWQgKi8KJiM0MzsJdTggcnN2WzJdOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyogcmVxdWVzdCBUTFYsIG1pcnJvciBVTklfQ01EX0xJTktfUVVBTElUWSAoaGVhZGVyICYjNDM7IHRhZy9sZW4gb25seSkgKi8KJiM0MztzdHJ1Y3QgbXQ3OTI1X2xxX3JlcSB7CiYjNDM7CXU4IHJzdls0XTsJCS8qIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1MgZml4ZWQgZmllbGQgKi8KJiM0MzsJX19sZTE2IHRhZzsJCS8qIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEgKi8KJiM0MzsJX19sZTE2IGxlbjsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qIGV2ZW50IFRMViwgbWlycm9yIFVOSV9FVkVOVF9MSU5LX1FVQUxJVFkgKi8KJiM0MztzdHJ1Y3QgbXQ3OTI1X2xxX2V2ZW50IHsKJiM0MzsJdTggcnN2WzRdOwkJLyogVU5JX0VWRU5UX1NUQVRJU1RJQ1MgZml4ZWQgZmllbGQgKi8KJiM0MzsJX19sZTE2IHRhZzsJCS8qIFVOSV9FVkVOVF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSA9IDEgKi8KJiM0MzsJX19sZTE2IGxlbjsKJiM0MzsJc3RydWN0IG10NzkyNV9saW5rX3F1YWxpdHkgbHFbTVQ3OTI1X0xRX0JBTkRfTlVNXTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7bXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeF9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwICpsb29rdXAgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgbXQ3OTJ4X3ZpZiAqbXZpZjsKJiM0MzsJc3RydWN0IG10NzkyeF9zdGEgKm1zdGE7CiYjNDM7CiYjNDM7CWlmIChsb29rdXAtJmd0O3N0YV9yZWNfaWR4ICZndDs9IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICh2aWYtJmd0O3R5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fCAhdmlmLSZndDtjZmcuYXNzb2MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW12aWYgPSAoc3RydWN0IG10NzkyeF92aWYgKil2aWYtJmd0O2Rydl9wcml2OwomIzQzOwltc3RhID0gbXZpZi0mZ3Q7d2VwX3N0YTsKJiM0MzsJaWYgKCFtc3RhKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIW1zdGEtJmd0O2RlZmxpbmsud2NpZC5zdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxvb2t1cC0mZ3Q7c3RhX3JlY19pZHggPSBtc3RhLSZndDtkZWZsaW5rLndjaWQuaWR4OwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0MzttdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICpzdGFfcmVjX2lkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3JlY19sb29rdXAgbG9va3VwID0gewomIzQzOwkJLnN0YV9yZWNfaWR4ID0gLTEsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkZXYtJmd0O210NzYubXV0ZXgpOwomIzQzOwomIzQzOwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhkZXYtJmd0O21waHkuaHcsCiYjNDM7CQkJCQkgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfUkVTVU1FX0FMTCwKJiM0MzsJCQkJCSAgICBtdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4X2l0ZXIsCiYjNDM7CQkJCQkgICAgJmFtcDtsb29rdXApOwomIzQzOwomIzQzOwlpZiAobG9va3VwLnN0YV9yZWNfaWR4ICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRU5PVENPTk47CiYjNDM7CiYjNDM7CWlmIChsb29rdXAuc3RhX3JlY19pZHggJmd0OyBVOF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJKnN0YV9yZWNfaWR4ID0gbG9va3VwLnN0YV9yZWNfaWR4OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRGVjb2RlIHRoZSBUWCBWZWN0b3IgQkJQIGxhdGNoIGFuZCBwcmludCB0aGUgbGFzdCBUWCByYXRlICovCiYjNDM7dm9pZAomIzQzO210NzkyNV9wcmludF9sYXN0X3R4X3JhdGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBfX2xlMzIgbGVfdHh2WzNdKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqbW9kZV9zdHIgPSAmIzM0O04vQSYjMzQ7OwomIzQzOwl1OCByYXRlLCB0eG1vZGUsIGZybW9kZSwgc2dpLCBsZHBjLCBuc3RzLCBzdGJjLCBzcGUsIGRjbSwgZXJzdTEwNnQ7CiYjNDM7CXM4IHR4cHdyLCBwb3NfdHhwd3I7CiYjNDM7CXUzMiB0eHZbM107CiYjNDM7CiYjNDM7CXR4dlswXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlswXSk7CiYjNDM7CXR4dlsxXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsxXSk7CiYjNDM7CXR4dlsyXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsyXSk7CiYjNDM7CiYjNDM7CWlmICh0eHZbMF0gPT0gMHhmZmZmZmZmZikgewomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICAlcyA9ICVzXG4mIzM0OywgJiMzNDsgJiMzNDssICYjMzQ7TGFzdCBUWCBSYXRlJiMzNDssICYjMzQ7Ti9BJiMzNDspOwomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICAlcyA9ICVzXG4mIzM0OywKJiM0MzsJCQkgICAmIzM0OyAmIzM0OywgJiMzNDtDaGlwIE91dCBUWCBQb3dlciYjMzQ7LCAmIzM0O04vQSYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXRlID0gTVQ3OTI1X1RYVl9HRVRfVFhfUkFURSh0eHYpOwomIzQzOwl0eG1vZGUgPSBNVDc5MjVfVFhWX0dFVF9UWF9NT0RFKHR4dik7CiYjNDM7CWZybW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX0ZSTU9ERSh0eHYpOwomIzQzOwluc3RzID0gTVQ3OTI1X1RYVl9HRVRfVFhfTlNUUyh0eHYpICYjNDM7IDE7CiYjNDM7CXNnaSA9IE1UNzkyNV9UWFZfR0VUX1RYX1NHSSh0eHYpOwomIzQzOwlsZHBjID0gTVQ3OTI1X1RYVl9HRVRfVFhfTERQQyh0eHYpOwomIzQzOwlzdGJjID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyh0eHYpOwomIzQzOwl0eHB3ciA9IE1UNzkyNV9UWFZfR0VUX1RYX1BXUih0eHYpOwomIzQzOwlzcGUgPSBNVDc5MjVfVFhWX0dFVF9UWF9TUEVfSURYKHR4dik7CiYjNDM7CWRjbSA9IE1UNzkyNV9UWFZfR0VUX1RYX0RDTSh0eHYpOwomIzQzOwllcnN1MTA2dCA9IE1UNzkyNV9UWFZfR0VUX1RYXzEwNlQodHh2KTsKJiM0MzsKJiM0MzsJaWYgKGRjbSkKJiM0MzsJCXJhdGUgPSBNVDc5MjVfVFhWX1JBVEVfVU5NQVNLX0RDTShyYXRlKTsKJiM0MzsJaWYgKGVyc3UxMDZ0KQomIzQzOwkJcmF0ZSA9IE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfMTA2VChyYXRlKTsKJiM0MzsKJiM0MzsJaWYgKHR4bW9kZSAmbHQ7IEFSUkFZX1NJWkUobXQ3OTI1X3R4X21vZGVfc3RyKSkKJiM0MzsJCW1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07CiYjNDM7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgJXMgPSAmIzM0OywgJiMzNDsgJiMzNDssICYjMzQ7TGFzdCBUWCBSYXRlJiMzNDspOwomIzQzOwomIzQzOwkvKiByYXRlL01DUyBmaWVsZCAqLwomIzQzOwlpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywKJiM0MzsJCQkgICByYXRlICZsdDsgNCA/IG10NzkyNV90eF9yYXRlX2Nja19zdHJbcmF0ZV0gOgomIzQzOwkJCSAgICgoKHJhdGUgJmd0Oz0gNSkgJmFtcDsmYW1wOyAocmF0ZSAmbHQ7PSA3KSkgPwomIzQzOwkJCSAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGUgLSA0XSA6CiYjNDM7CQkJICAgIG10NzkyNV90eF9yYXRlX2Nja19zdHJbNF0pKTsKJiM0MzsJZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSkKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslcywgJiMzNDssIG10NzkyNV9od19yYXRlX29mZG1fc3RyKHJhdGUpKTsKJiM0MzsJZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHwKJiM0MzsJCSB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGKQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0O01DUyVkLCAmIzM0OywgcmF0ZSk7CiYjNDM7CWVsc2UKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslcyVkX01DUyVkLCAmIzM0OywKJiM0MzsJCQkgICBzdGJjID8gJiMzNDtOU1RTJiMzNDsgOiAmIzM0O05TUyYjMzQ7LCBuc3RzLCByYXRlKTsKJiM0MzsKJiM0MzsJLyogYmFuZHdpZHRoICovCiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslcywgJiMzNDssCiYjNDM7CQkgICBmcm1vZGUgJmx0OyA1ID8gbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZybW9kZV0gOgomIzQzOwkJICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTsKJiM0MzsKJiM0MzsJLyogR0kgLyBwcmVhbWJsZSAqLwomIzQzOwlpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywgcmF0ZSAmbHQ7IDQgPyAmIzM0O0xQJiMzNDsgOiAmIzM0O1NQJiMzNDspOwomIzQzOwllbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKQomIzQzOwkJOyAvKiBPRkRNIGhhcyBubyBHSS9wcmVhbWJsZSB0byBwcmludCAqLwomIzQzOwllbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCB8fAomIzQzOwkJIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YgfHwKJiM0MzsJCSB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9WSFQgfHwKJiM0MzsJCSB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIpCiYjNDM7CQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LCBzZ2kgPT0gMCA/ICYjMzQ7TEdJJiMzNDsgOiAmIzM0O1NHSSYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywKJiM0MzsJCQkgICBzZ2kgPT0gMCA/ICYjMzQ7U0dJJiMzNDsgOiAoc2dpID09IDEgPyAmIzM0O01HSSYjMzQ7IDogJiMzNDtMR0kmIzM0OykpOwomIzQzOwomIzQzOwkvKiBtb2RlLCBEQ00sIDEwNnQsIFNUQkMsIGNvZGluZywgU1BFICovCiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslcyVzJXMlcyVzJXMlZFxuJiMzNDssCiYjNDM7CQkgICBtb2RlX3N0ciwKJiM0MzsJCSAgIGRjbSA/ICYjMzQ7LCBEQ00mIzM0OyA6ICYjMzQ7JiMzNDssIGVyc3UxMDZ0ID8gJiMzNDssIDEwNnQmIzM0OyA6ICYjMzQ7JiMzNDssCiYjNDM7CQkgICBzdGJjID8gJiMzNDssIFNUQkMsICYjMzQ7IDogJiMzNDssICYjMzQ7LCBsZHBjID09IDAgPyAmIzM0O0JDQyYjMzQ7IDogJiMzNDtMRFBDJiMzNDssCiYjNDM7CQkgICAmIzM0OywgU1BFJiMzNDssIHNwZSk7CiYjNDM7CiYjNDM7CS8qIGNoaXAgb3V0IFRYIHBvd2VyICh1bml0OiAwLjUgZEJtKSAqLwomIzQzOwlwb3NfdHhwd3IgPSAodHhwd3IgJmx0OyAwKSA/ICh+dHhwd3IgJiM0MzsgMSkgOiB0eHB3cjsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICAlcyA9ICVjJWQuJTFkIGRCbVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgJiMzNDtDaGlwIE91dCBUWCBQb3dlciYjMzQ7LAomIzQzOwkJICAgKHR4cHdyICZsdDsgMCkgPyAmIzM5Oy0mIzM5OyA6ICYjMzk7JiM0MzsmIzM5OywKJiM0MzsJCSAgIChwb3NfdHhwd3IgLyAyKSwgNSAqIChwb3NfdHhwd3IgJSAyKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEd1YXJkIGludGVydmFsIHVzZWQgZm9yIHRoZSBhdXRvLXJhdGUgZW50cmllcywgbWlycm9yIEdlbjRtCiYjNDM7ICogY29ubmFjM3hfZ2V0X3NnaV9pbmZvX2Zyb21fZncoKTogcGljayB0aGUgcGVyLW1vZGUvcGVyLUJXIGZsYWcuCiYjNDM7ICovCiYjNDM7dTgKJiM0MzttdDc5MjVfd3RibF9nZXRfc2dpKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlLCB1OCBmY2FwKQomIzQzO3sKJiM0MzsJYm9vbCBoZSA9ICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9TVSB8fAomIzQzOwkJICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgfHwKJiM0MzsJCSAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1RSSUcgfHwKJiM0MzsJCSAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VKTsKJiM0MzsJYm9vbCBlaHQgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX0VSIHx8CiYjNDM7CQkgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUcgfHwKJiM0MzsJCSAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUpOwomIzQzOwomIzQzOwlpZiAoZWh0KQomIzQzOwkJcmV0dXJuIHdyLSZndDtnaV9laHQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZmNhcCkgewomIzQzOwljYXNlIE1UNzkyNV9CV18yMDoKJiM0MzsJCXJldHVybiBoZSA/IHdyLSZndDtnMl9oZSA6IHdyLSZndDtnMjsKJiM0MzsJY2FzZSBNVDc5MjVfQldfNDA6CiYjNDM7CQlyZXR1cm4gaGUgPyB3ci0mZ3Q7ZzRfaGUgOiB3ci0mZ3Q7ZzQ7CiYjNDM7CWNhc2UgTVQ3OTI1X0JXXzgwOgomIzQzOwkJcmV0dXJuIGhlID8gd3ItJmd0O2c4X2hlIDogd3ItJmd0O2c4OwomIzQzOwljYXNlIE1UNzkyNV9CV18xNjA6CiYjNDM7CQlyZXR1cm4gaGUgPyB3ci0mZ3Q7ZzE2X2hlIDogd3ItJmd0O2cxNjsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIENvZGluZyB1c2VkIGZvciB0aGUgYXV0by1yYXRlIGVudHJpZXMsIG1pcnJvciBHZW40bQomIzQzOyAqIGNvbm5hYzN4X3d0YmxfZ2V0X2xkcGNfaW5mb19mcm9tX2Z3KCk6IDAgPSBCQ0MsIDEgPSBMRFBDLgomIzQzOyAqLwomIzQzO3U4CiYjNDM7bXQ3OTI1X3d0YmxfZ2V0X2xkcGMoY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyLCB1OCB0eG1vZGUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHR4bW9kZSkgewomIzQzOwljYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVg6CiYjNDM7CWNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGOgomIzQzOwkJcmV0dXJuIHdyLSZndDtodF9sZHBjOwomIzQzOwljYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfVkhUOgomIzQzOwkJcmV0dXJuIHdyLSZndDt2aHRfbGRwYzsKJiM0MzsJY2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVOgomIzQzOwljYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVI6CiYjNDM7CWNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHOgomIzQzOwljYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfTVU6CiYjNDM7CQlyZXR1cm4gd3ItJmd0O2hlX2xkcGM7CiYjNDM7CWNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfRVI6CiYjNDM7CWNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfVFJJRzoKJiM0MzsJY2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9NVToKJiM0MzsJCXJldHVybiB3ci0mZ3Q7ZWh0X2xkcGM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LAomIzQzOwkJCXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXUxNiBsZW4gPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKmV2ZW50ID0gTlVMTDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX3JlcSByZXEgPSB7CiYjNDM7CQkudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NUQSksCiYjNDM7CQkubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLAomIzQzOwkJLmxsc19yZWFkX2NsZWFyID0gZmFsc2UsCiYjNDM7CQkucmVzZXRfY291bnRlciA9IGZhbHNlLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXQgPSBtdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4KGRldiwgJmFtcDtyZXEuc3RhX3JlY19pZHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFzdGF0cykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKCZhbXA7ZGV2LSZndDttdDc2LAomIzQzOwkJCQkJTUNVX1VOSV9RVUVSWShHRVRfU1RBVF9JTkZPKSwKJiM0MzsJCQkJCSZhbXA7cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgJmFtcDtza2IpOwomIzQzOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZXZlbnQgPSAoc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKilza2ItJmd0O2RhdGE7CiYjNDM7CiYjNDM7CWlmIChsZTE2X3RvX2NwdShldmVudC0mZ3Q7dGFnKSAhPSBVTklfQ01EX0lEX1NUQVRJU1RJQ1NfU1RBKSB7CiYjNDM7CQlyZXQgPSAtRVBST1RPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVuID0gbGUxNl90b19jcHUoZXZlbnQtJmd0O2xlbik7CiYjNDM7CWlmIChsZW4gJmx0OyBzaXplb2YoKmV2ZW50KSAtIHNpemVvZihldmVudC0mZ3Q7cnN2KSB8fAomIzQzOwkgICAgbGVuICZndDsgc2tiLSZndDtsZW4gLSBzaXplb2YoZXZlbnQtJmd0O3JzdikgfHwgIUlTX0FMSUdORUQobGVuLCA0KSkgewomIzQzOwkJcmV0ID0gLUVNU0dTSVpFOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGV2ZW50LSZndDtzdGF0cy52ZXJzaW9uICE9IE1UNzkyNV9TVEFfU1RBVFNfVkVSU0lPTikgewomIzQzOwkJcmV0ID0gLUVQUk9UTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghKGxlMzJfdG9fY3B1KGV2ZW50LSZndDtzdGF0cy5mbGFncykgJmFtcDsgTVQ3OTI1X1NUQV9TVEFUU19WQUxJRCkpIHsKJiM0MzsJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwltZW1jcHkoc3RhdHMsICZhbXA7ZXZlbnQtJmd0O3N0YXRzLCBzaXplb2YoKnN0YXRzKSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtdDc5MjVfbWN1X2dldF9taWJfaW5mbyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCBiYW5kX2lkeCwKJiM0MzsJCQkgICAgY29uc3QgdTMyICpjb3VudGVycywgdTggY291bnRlcl9udW0sCiYjNDM7CQkJICAgIHU2NCAqdmFsdWVzKQomIzQzO3sKJiM0MzsJdTggKnJlcTsKJiM0MzsJdTggKnRsdiwgKnRsdl9lbmQ7CiYjNDM7CXUxNiByZXFfbGVuOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIgKnJlcV9oZHI7CiYjNDM7CXN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKnJlcV90bHY7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CWlmICghY291bnRlcnMgfHwgIXZhbHVlcyB8fCAhY291bnRlcl9udW0gfHwKJiM0MzsJICAgIGNvdW50ZXJfbnVtICZndDsgTVQ3OTI1X01JQl9NQVhfQ05UKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIGNsZWFyIG91dHB1dDsgY291bnRlcnMgbm90IHJldHVybmVkIGJ5IGZpcm13YXJlIHN0YXkgMCAqLwomIzQzOwltZW1zZXQodmFsdWVzLCAwLCBjb3VudGVyX251bSAqIHNpemVvZigqdmFsdWVzKSk7CiYjNDM7CiYjNDM7CXJlcV9sZW4gPSBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSAmIzQzOwomIzQzOwkJICBjb3VudGVyX251bSAqIHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKTsKJiM0MzsKJiM0MzsJcmVxID0ga3phbGxvYyhyZXFfbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFyZXEpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmVxX2hkciA9IChzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIgKilyZXE7CiYjNDM7CXJlcV9oZHItJmd0O2JhbmRfaWR4ID0gYmFuZF9pZHg7CiYjNDM7CiYjNDM7CXJlcV90bHYgPSAoc3RydWN0IG10NzkyNV9taWJfZGF0YSAqKShyZXEgJiM0Mzsgc2l6ZW9mKCpyZXFfaGRyKSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudGVyX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcV90bHZbaV0udGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9NSUJfREFUQSk7CiYjNDM7CQlyZXFfdGx2W2ldLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKSk7CiYjNDM7CQlyZXFfdGx2W2ldLmNvdW50ZXIgPSBjcHVfdG9fbGUzMihjb3VudGVyc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZygmYW1wO2Rldi0mZ3Q7bXQ3NiwKJiM0MzsJCQkJCU1DVV9VTklfUVVFUlkoR0VUX01JQl9JTkZPKSwgcmVxLAomIzQzOwkJCQkJcmVxX2xlbiwgdHJ1ZSwgJmFtcDtza2IpOwomIzQzOwlrZnJlZShyZXEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcikpIHsKJiM0MzsJCXJldCA9IC1FTVNHU0laRTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdhbGsgdGhlIHJldHVybmVkIFRMVnMsIG1hdGNoIGVhY2ggY291bnRlciBJRCB0byB0aGUgcmVxdWVzdCAqLwomIzQzOwl0bHYgPSBza2ItJmd0O2RhdGEgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcik7CiYjNDM7CXRsdl9lbmQgPSBza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtsZW47CiYjNDM7CiYjNDM7CXdoaWxlICh0bHYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpICZsdDs9IHRsdl9lbmQpIHsKJiM0MzsJCXN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKmV2dF90bHYgPQomIzQzOwkJCShzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICopdGx2OwomIzQzOwkJdTE2IHRhZyA9IGxlMTZfdG9fY3B1KGV2dF90bHYtJmd0O3RhZyk7CiYjNDM7CQl1MTYgbGVuID0gbGUxNl90b19jcHUoZXZ0X3Rsdi0mZ3Q7bGVuKTsKJiM0MzsJCXUzMiBjb3VudGVyOwomIzQzOwomIzQzOwkJaWYgKGxlbiAmbHQ7IHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKSB8fAomIzQzOwkJICAgIHRsdiAmIzQzOyBsZW4gJmd0OyB0bHZfZW5kKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKHRhZyA9PSBVTklfQ01EX01JQl9EQVRBKSB7CiYjNDM7CQkJY291bnRlciA9IGxlMzJfdG9fY3B1KGV2dF90bHYtJmd0O2NvdW50ZXIpOwomIzQzOwomIzQzOwkJCWlmIChjb3VudGVyICZsdDsgTVQ3OTI1X01JQl9DTlRfTUFYX05VTSkgewomIzQzOwkJCQlmb3IgKGkgPSAwOyBpICZsdDsgY291bnRlcl9udW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCQlpZiAoY291bnRlcnNbaV0gPT0gY291bnRlcikgewomIzQzOwkJCQkJCXZhbHVlc1tpXSA9CiYjNDM7CQkJCQkJICBsZTY0X3RvX2NwdShldnRfdGx2LSZndDtkYXRhKTsKJiM0MzsJCQkJCQlicmVhazsKJiM0MzsJCQkJCX0KJiM0MzsJCQkJfQomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXRsdiAmIzQzOz0gbGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IDA7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgKm10NzkyNV9od19yYXRlX29mZG1fc3RyKHU4IG9mZG1faWR4KQomIzQzO3sKJiM0MzsJY2hhciAqIGNvbnN0IG9mZG1fc3RyW10gPSB7CiYjNDM7CQkmIzM0OzZNJiMzNDssICYjMzQ7OU0mIzM0OywgJiMzNDsxMk0mIzM0OywgJiMzNDsxOE0mIzM0OywgJiMzNDsyNE0mIzM0OywgJiMzNDszNk0mIzM0OywgJiMzNDs0OE0mIzM0OywgJiMzNDs1NE0mIzM0OywgJiMzNDtOL0EmIzM0OwomIzQzOwl9OwomIzQzOwomIzQzOwlzd2l0Y2ggKG9mZG1faWR4KSB7CiYjNDM7CWNhc2UgMTE6IHJldHVybiBvZmRtX3N0clswXTsJLyogNk0gKi8KJiM0MzsJY2FzZSAxNTogcmV0dXJuIG9mZG1fc3RyWzFdOwkvKiA5TSAqLwomIzQzOwljYXNlIDEwOiByZXR1cm4gb2ZkbV9zdHJbMl07CS8qIDEyTSAqLwomIzQzOwljYXNlIDE0OiByZXR1cm4gb2ZkbV9zdHJbM107CS8qIDE4TSAqLwomIzQzOwljYXNlIDk6ICByZXR1cm4gb2ZkbV9zdHJbNF07CS8qIDI0TSAqLwomIzQzOwljYXNlIDEzOiByZXR1cm4gb2ZkbV9zdHJbNV07CS8qIDM2TSAqLwomIzQzOwljYXNlIDg6ICByZXR1cm4gb2ZkbV9zdHJbNl07CS8qIDQ4TSAqLwomIzQzOwljYXNlIDEyOiByZXR1cm4gb2ZkbV9zdHJbN107CS8qIDU0TSAqLwomIzQzOwlkZWZhdWx0OiByZXR1cm4gb2ZkbV9zdHJbOF07CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlIC0gZmV0Y2ggdGhlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSBmb3IgYSBXQ0lECiYjNDM7ICogQGRldjoJZGV2aWNlCiYjNDM7ICogQHdsYW5faWR4OglIVyBXVEJMIC8gV0NJRCBpbmRleCAoc2VlIG10NzkyNV9zdGFfc3RhdHMud3RibF9pZHgpCiYjNDM7ICogQHJhdGU6CW91dCwgZmlsbGVkIHdpdGggdGhlIGF1dG8tcmF0ZSB0YWJsZSBzbmFwc2hvdAomIzQzOyAqCiYjNDM7ICogTWlycm9yIG9mIEdlbjRtIHdsYW5vaWRHZXRTdGF0V3RibCgpOiBzZW5kIFVOSV9DTURfR0VUX1NUQVRfSU5GTyB3aXRoIHRoZQomIzQzOyAqIFdUQkwgcmF0ZSBUTFYgKGNtZCB0YWcgMTApIGFuZCBwYXJzZSB0aGUgcmVwbHkgKGV2ZW50IHRhZyAxMikgaW50byBAcmF0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7aW50IG10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MTYgd2xhbl9pZHgsCiYjNDM7CQkJICAgICBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqcmF0ZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICpldmVudCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZV9yZXEgcmVxID0gewomIzQzOwkJLnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMKSwKJiM0MzsJCS5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksCiYjNDM7CQkud2xhbl9pZHggPSBjcHVfdG9fbGUxNih3bGFuX2lkeCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmICghcmF0ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKCZhbXA7ZGV2LSZndDttdDc2LAomIzQzOwkJCQkJTUNVX1VOSV9RVUVSWShHRVRfU1RBVF9JTkZPKSwKJiM0MzsJCQkJCSZhbXA7cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgJmFtcDtza2IpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKCpldmVudCkpIHsKJiM0MzsJCXJldCA9IC1FTVNHU0laRTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICopc2tiLSZndDtkYXRhOwomIzQzOwomIzQzOwlpZiAobGUxNl90b19jcHUoZXZlbnQtJmd0O3JhdGUudGFnKSAhPSBNVDc5MjVfVU5JX0VWRU5UX1NUQVRJU1RJQ1NfV1RCTCkgewomIzQzOwkJcmV0ID0gLUVQUk9UTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbWNweShyYXRlLCAmYW1wO2V2ZW50LSZndDtyYXRlLCBzaXplb2YoKnJhdGUpKTsKJiM0MzsJcmV0ID0gMDsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5IC0gcXVlcnkgUlNTSSBhbmQgVFggbGluayBzcGVlZCBmb3IgYSBiYW5kCiYjNDM7ICogQGRldjoJZGV2aWNlCiYjNDM7ICogQGJhbmRfaWR4OgliYW5kL0JTUyBpbmRleCAoMC4uMykKJiM0MzsgKiBAcnNzaToJb3V0LCBtb3ZpbmctYXZlcmFnZSBiZWFjb24gUlNTSSBpbiBkQm0gKG1heSBiZSBOVUxMKQomIzQzOyAqIEB0eF9saW5rX3NwZWVkX2ticHM6IG91dCwgVFggcmF0ZSBpbiBrYml0L3MgKG1heSBiZSBOVUxMKQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9FTlQgaWYgdGhlIGJhbmQmIzM5O3MgbGluayBxdWFsaXR5IGlzIG5vdCByZWFkeS4KJiM0MzsgKgomIzQzOyAqIE9ubHkgUlNTSSBhbmQgVFggcmF0ZSBjb21lIGZyb20gZmlybXdhcmUgaGVyZTsgZm9yIFJYIHJhdGUgcmVhZCB3Y2lkLSZndDtyYXRlLgomIzQzOyAqLwomIzQzO2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsCiYjNDM7CQkJCXM4ICpyc3NpLCB1MzIgKnR4X2xpbmtfc3BlZWRfa2JwcykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0cnVjdCBtdDc5MjVfbHFfZXZlbnQgKmV2ZW50OwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSAqbHE7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXN0cnVjdCBtdDc5MjVfbHFfcmVxIHJlcSA9IHsKJiM0MzsJCS50YWcgPSBjcHVfdG9fbGUxNihVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19RVUFMSVRZKSwKJiM0MzsJCS5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChiYW5kX2lkeCAmZ3Q7PSBNVDc5MjVfTFFfQkFORF9OVU0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZygmYW1wO2Rldi0mZ3Q7bXQ3NiwKJiM0MzsJCQkJCU1DVV9VTklfUVVFUlkoR0VUX1NUQVRfSU5GTyksICZhbXA7cmVxLAomIzQzOwkJCQkJc2l6ZW9mKHJlcSksIHRydWUsICZhbXA7c2tiKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqZXZlbnQpKSB7CiYjNDM7CQlyZXQgPSAtRU1TR1NJWkU7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlldmVudCA9IChzdHJ1Y3QgbXQ3OTI1X2xxX2V2ZW50ICopc2tiLSZndDtkYXRhOwomIzQzOwomIzQzOwlpZiAobGUxNl90b19jcHUoZXZlbnQtJmd0O3RhZykgIT0gVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSkgewomIzQzOwkJcmV0ID0gLUVQUk9UTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWxxID0gJmFtcDtldmVudC0mZ3Q7bHFbYmFuZF9pZHhdOwomIzQzOwlpZiAoIWxxLSZndDtpc19yZWFkeSkgewomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyc3NpKQomIzQzOwkJKnJzc2kgPSBscS0mZ3Q7cnNzaTsKJiM0MzsKJiM0MzsJLyogZmlybXdhcmUgcmVwb3J0cyBUWCByYXRlIGluIDUwMCBLYi9zIHVuaXRzIC0mZ3Q7IGtiaXQvcyAqLwomIzQzOwlpZiAodHhfbGlua19zcGVlZF9rYnBzKQomIzQzOwkJKnR4X2xpbmtfc3BlZWRfa2JwcyA9IGxlMTZfdG9fY3B1KGxxLSZndDtsaW5rX3NwZWVkKSAqIDUwMDsKJiM0MzsKJiM0MzsJcmV0ID0gMDsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hNzBiOWViM2FhODA2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaApAQCAtMCwwICYjNDM7MSwzMDkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyICovCiYjNDM7LyogQ29weXJpZ2h0IChDKSAyMDI2IE1lZGlhVGVrIEluYy4gKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fTVQ3OTI1X1NUQVRTX0gKJiM0MzsjZGVmaW5lIF9fTVQ3OTI1X1NUQVRTX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL210NzZfY29ubmFjX21jdS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfQUNfTlVNIDQKJiM0MzsjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfQkFORF9OVU0gMgomIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNIDE2CiYjNDM7I2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1RYX1FVQUxJVFlfTlVNIDQKJiM0MzsjZGVmaW5lIE1UNzkyNV9UWF9NT0RFX05VTSAgICAgIDE2CiYjNDM7I2RlZmluZSBNVDc5MjVfVFhfUkFURV9DQ0tfTlVNICA1CiYjNDM7I2RlZmluZSBNVDc5MjVfVFhfUkFURV9CV19OVU0gICA2CiYjNDM7CiYjNDM7LyogSFcgcmF0ZSBjb2RlICgxNi1iaXQpIGZpZWxkIGV4dHJhY3QsIG1pcnJvciBHZW40bSBDT05OQUMzWF9IV19UWF9SQVRFX1RPXyouCiYjNDM7ICogVGhlIGF1dG8tcmF0ZSB0YWJsZSBzdG9yZXMgb25lIHJhdGUgY29kZSBwZXIgZW50cnkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19NQ1MoX3gpCSgoKF94KSAmYW1wOyBHRU5NQVNLKDUsIDApKSAmZ3Q7Jmd0OyAwKQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fTU9ERShfeCkJKCgoX3gpICZhbXA7IEdFTk1BU0soOSwgNikpICZndDsmZ3Q7IDYpCiYjNDM7I2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19OU1MoX3gpCSgoKF94KSAmYW1wOyBHRU5NQVNLKDEzLCAxMCkpICZndDsmZ3Q7IDEwKQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fU1RCQyhfeCkJKCgoX3gpICZhbXA7IEJJVCgxNCkpICZndDsmZ3Q7IDE0KQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fRENNKF94KQkoKChfeCkgJmFtcDsgQklUKDQpKSAmZ3Q7Jmd0OyA0KQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fMTA2VChfeCkJKCgoX3gpICZhbXA7IEJJVCg1KSkgJmd0OyZndDsgNSkKJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00oX3IpCSgodTgpKF9yKSAmYW1wOyAweGVmKQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVU5NQVNLXzEwNlQoX3IpCSgodTgpKF9yKSAmYW1wOyAweGRmKQomIzQzOwomIzQzOy8qIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgKG1pcnJvciBHZW40bQomIzQzOyAqIEFVVE9fUkFURV9OVU0pLiBSQSBjeWNsZXMgdGhyb3VnaCB0aGVzZSBhbmQgcmVwb3J0cyB3aGljaCBvbmUgaXMgaW4gdXNlCiYjNDM7ICogdmlhIHd0YmwtJmd0O3JhdGVfaWR4LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTVQ3OTI1X0FVVE9fUkFURV9OVU0gOAomIzQzOwomIzQzOy8qIEZpcm13YXJlIEVWRU5UX1NUQVRJU1RJQ1Mgc3ViLWV2ZW50IHRhZ3MuIFRoZSBXVEJMIHJhdGUgcmVxdWVzdCB1c2VzIGNtZCB0YWcKJiM0MzsgKiBVTklfQ01EX0lEX1NUQVRJU1RJQ1NfV1RCTCAoMTApIGJ1dCB0aGUgZmlybXdhcmUgcmVwbGllcyB3aXRoIGV2ZW50IHRhZyAxMi4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1UNzkyNV9VTklfRVZFTlRfU1RBVElTVElDU19XVEJMIDEyCiYjNDM7CiYjNDM7LyogQ09OTkFDM1ggVFggVmVjdG9yIEJCUCBsYXRjaCBiaXQgZmllbGRzIChtaXJyb3IgY21tX2FzaWNfY29ubmFjM3guaCkuCiYjNDM7ICogVGhlc2Ugb3BlcmF0ZSBvbiB0aGUgMy1EV09SRCB0eF92ZWN0b3JbYmFuZF0udHh2WzNdIGFycmF5LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUkFURShfdHh2KQkoKF90eHYpWzJdICZhbXA7IDB4N2YpCiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9MRFBDKF90eHYpCSgoKF90eHYpWzJdICZhbXA7ICgweDEgJmx0OyZsdDsgNykpICZndDsmZ3Q7IDcpCiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9TVEJDKF90eHYpCSgoKF90eHYpWzBdICZhbXA7ICgweDMgJmx0OyZsdDsgNikpICZndDsmZ3Q7IDYpCiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9GUk1PREUoX3R4dikJKCgoX3R4dilbMF0gJmFtcDsgKDB4NyAmbHQ7Jmx0OyA4KSkgJmd0OyZndDsgOCkKJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX01PREUoX3R4dikJKCgoX3R4dilbMF0gJmFtcDsgKDB4ZiAmbHQ7Jmx0OyAxMikpICZndDsmZ3Q7IDEyKQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfTlNUUyhfdHh2KQkoKChfdHh2KVsyXSAmYW1wOyAoMHhmVSAmbHQ7Jmx0OyAyOCkpICZndDsmZ3Q7IDI4KQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUFdSKF90eHYpCSgoKF90eHYpWzBdICZhbXA7ICgweGZmICZsdDsmbHQ7IDE2KSkgJmd0OyZndDsgMTYpCiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9TR0koX3R4dikJKCgoX3R4dilbMV0gJmFtcDsgKDB4MyAmbHQ7Jmx0OyAyNikpICZndDsmZ3Q7IDI2KQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfU1BFX0lEWChfdHh2KQkoKChfdHh2KVswXSAmYW1wOyAoMHgxZiAmbHQ7Jmx0OyAwKSkgJmd0OyZndDsgMCkKJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0RDTShfdHh2KQkoKChfdHh2KVsyXSAmYW1wOyAoMHgxICZsdDsmbHQ7IDQpKSAmZ3Q7Jmd0OyA0KQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfMTA2VChfdHh2KQkoKChfdHh2KVsyXSAmYW1wOyAoMHgxICZsdDsmbHQ7IDUpKSAmZ3Q7Jmd0OyA1KQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS19EQ00oX3IpCSgodTgpKF9yKSAmYW1wOyAweGVmKQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS18xMDZUKF9yKQkoKHU4KShfcikgJmFtcDsgMHhkZikKJiM0MzsKJiM0MztleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9tb2RlX3N0cltNVDc5MjVfVFhfTU9ERV9OVU1dOwomIzQzO2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltNVDc5MjVfVFhfUkFURV9DQ0tfTlVNXTsKJiM0MztleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9yYXRlX2J3X3N0cltNVDc5MjVfVFhfUkFURV9CV19OVU1dOwomIzQzOwomIzQzOy8qIFRYIHJhdGUgbW9kZSwgbWlycm9yIEdlbjRtIFRYX1JBVEVfTU9ERV8qIChzZWUgbmljX3JhdGUuaCkuIFVzZWQgdG8gZGVjb2RlCiYjNDM7ICogYm90aCB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCBhbmQgdGhlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSByYXRlIGNvZGVzLgomIzQzOyAqLwomIzQzO2VudW0gbXQ3OTI1X3R4X3JhdGVfbW9kZSB7CiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfQ0NLID0gMCwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNID0gMSwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCA9IDIsCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiA9IDMsCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfVkhUID0gNCwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIgPSA1LAomIzQzOwlNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVID0gOCwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9FUiA9IDksCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfSEVfVFJJRyA9IDEwLAomIzQzOwlNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VID0gMTEsCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfRUhUX0VSID0gMTMsCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUcgPSAxNCwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUgPSAxNSwKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlVTklfQ01EX01JQl9EQVRBLAomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBzdGF0c19xdWVyeV9taWJfYXJyYXlfaW5kZXggewomIzQzOwlRVUVSWV9NSUJfQ05UX1JYX0ZDU19FUlIgPSAwLAomIzQzOwlRVUVSWV9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1csCiYjNDM7CVFVRVJZX01JQl9DTlRfUlhfTVBEVSwKJiM0MzsJUVVFUllfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCwKJiM0MzsJUVVFUllfTUlCX0NOVF9QRl9EUk9QLAomIzQzOwlRVUVSWV9NSUJfQ05UX0xFTl9NSVNNQVRDSCwKJiM0MzsJUVVFUllfTUlCX0NOVF9DSEFOTkVMX0lETEUsCiYjNDM7CVFVRVJZX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FLAomIzQzOwlRVUVSWV9NSUJfQ05UX01EUkRZLAomIzQzOwlRVUVSWV9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FLAomIzQzOwlRVUVSWV9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRSwKJiM0MzsJUVVFUllfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUUsCiYjNDM7CVFVRVJZX01JQl9DTlRfUF9DQ0FfVElNRSwKJiM0MzsJUVVFUllfTUlCX0NOVF9TX0NDQV9USU1FLAomIzQzOwlRVUVSWV9NSUJfQ05UX1BfRURfVElNRSwKJiM0MzsJUVVFUllfTUlCX0NOVF9CQ05fVFgsCiYjNDM7CVFVRVJZX01JQl9DTlRfVFhfQldfNDBNSFosCiYjNDM7CVFVRVJZX01JQl9DTlRfVFhfQldfODBNSFosCiYjNDM7CVFVRVJZX01JQl9DTlRfVFhfQldfMTYwTUhaLAomIzQzOwlRVUVSWV9NSUJfQ05UX0JTUzBfQkFfTUlTUywKJiM0MzsJUVVFUllfTUlCX0NOVF9CU1MwX1JUU19UWF9DTlQsCiYjNDM7CVFVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSwKJiM0MzsJUVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIsCiYjNDM7CVFVRVJZX01JQl9DTlRfQlNTMF9SVFNfUkVUUlksCiYjNDM7CVFVRVJZX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCwKJiM0MzsJUVVFUllfTUlCX0NOVF9BTVBEVSwKJiM0MzsJUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVLAomIzQzOwlRVUVSWV9NSUJfQ05UX0FNUERVX0FDS0VELAomIzQzOwlRVUVSWV9NSUJfQ05UX01BWF9OVU0sCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHN0YXRzX3RyeF9hZ2dfcmFuZ2UgewomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTBfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTFfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTJfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTNfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTRfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTVfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTZfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTdfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRV9NQVhfTlVNCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJTVQ3OTI1X0JXXzIwID0gMCwKJiM0MzsJTVQ3OTI1X0JXXzQwLAomIzQzOwlNVDc5MjVfQldfODAsCiYjNDM7CU1UNzkyNV9CV18xNjAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19hYyB7CiYjNDM7CV9fbGUzMiB0eF9mYWlsOwomIzQzOwlfX2xlMzIgdHhfcmV0cnk7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c190eF92ZWN0b3IgewomIzQzOwlfX2xlMzIgdHh2WzNdOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfbWliIHsKJiM0MzsJX19sZTMyIHJ4X21wZHVfY250OwomIzQzOwlfX2xlMzIgZmNzX2Vycm9yOwomIzQzOwlfX2xlMzIgcnhfZmlmb19mdWxsOwomIzQzOwlfX2xlMzIgYW1wZHVfdHhfc2ZfY250OwomIzQzOwlfX2xlMzIgYW1wZHVfdHhfYWNrX3NmX2NudDsKJiM0MzsJX19sZTMyIHR4X3JhbmdlX2FtcGR1X2NudFtNVDc5MjVfU1RBX1NUQVRTX0FHR19SQU5HRV9OVU1dOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyogRmlybXdhcmUgRVZFTlRfU1RBX1NUQVRJU1RJQ1MgYm9keS4gKi8KJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyB7CiYjNDM7CXU4IHZlcnNpb247CiYjNDM7CXU4IHJzdlszXTsKJiM0MzsJX19sZTMyIGZsYWdzOwomIzQzOwomIzQzOwl1OCBzdGFfaWR4OwomIzQzOwl1OCBic3NfaWR4OwomIzQzOwl1OCB3dGJsX2lkeDsKJiM0MzsJdTggcnN2MTsKJiM0MzsKJiM0MzsJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwomIzQzOwl1OCBwZXI7CiYjNDM7CXU4IHJjcGk7CiYjNDM7CiYjNDM7CV9fbGUzMiBwaHlfbW9kZTsKJiM0MzsJX19sZTE2IGxpbmtfc3BlZWQ7IC8qIDAuNSBNYml0L3MgdW5pdHMgKi8KJiM0MzsJdTggbGlua19xdWFsaXR5OwomIzQzOwl1OCBsaW5rX3Jlc2VydmVkOwomIzQzOwomIzQzOwlfX2xlMzIgdHhfY291bnQ7CiYjNDM7CV9fbGUzMiB0eF9mYWlsX2NvdW50OwomIzQzOwlfX2xlMzIgdHhfbGlmZV90aW1lb3V0X2NvdW50OwomIzQzOwlfX2xlMzIgdHhfZG9uZV9haXJfdGltZTsKJiM0MzsJX19sZTMyIHRyYW5zbWl0X2NvdW50OwomIzQzOwlfX2xlMzIgdHJhbnNtaXRfZmFpbF9jb3VudDsKJiM0MzsKJiM0MzsJc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfYWMgYWNbTVQ3OTI1X1NUQV9TVEFUU19BQ19OVU1dOwomIzQzOwomIzQzOwl1OCB0ZW1wZXJhdHVyZTsKJiM0MzsJdTggc2tpcF9hcjsKJiM0MzsJdTggYXJfdGFibGVfaWR4OwomIzQzOwl1OCByYXRlX2VudHJ5X2lkeDsKJiM0MzsJdTggcmF0ZV9lbnRyeV9pZHhfcHJldjsKJiM0MzsJdTggdHhfc2dpX2RldGVjdF9wYXNzX2NudDsKJiM0MzsJdTggYXZlX3BlcjsKJiM0MzsJdTggcnN2MjsKJiM0MzsKJiM0MzsJX19sZTMyIGFnZ19yYW5nZV9jdHJsWzJdOwomIzQzOwl1OCByYW5nZV9tb2RlOwomIzQzOwl1OCByc3YzWzNdOwomIzQzOwlfX2xlMzIgYWdnX3JhbmdlX2N0cmxfZXh0WzZdOwomIzQzOwomIzQzOwl1OCBhcl9zdGF0ZV9jdXJyOwomIzQzOwl1OCBhcl9zdGF0ZV9wcmV2OwomIzQzOwl1OCBhcl9hY3Rpb25fdHlwZTsKJiM0MzsJdTggaGlnaGVzdF9yYXRlX2NudDsKJiM0MzsJdTggbG93ZXN0X3JhdGVfY250OwomIzQzOwl1OCByc3Y0OwomIzQzOwlfX2xlMTYgdHJhaW5fdXA7CiYjNDM7CV9fbGUxNiB0cmFpbl9kb3duOwomIzQzOwl1OCByc3Y1WzJdOwomIzQzOwlfX2xlMzIgcmF0ZTFfdHhfY250OwomIzQzOwlfX2xlMzIgcmF0ZTFfZmFpbF9jbnQ7CiYjNDM7CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX3R4X3ZlY3RvciB0eF92ZWN0b3JbTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTV07CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX21pYiBtaWJbTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTV07CiYjNDM7CiYjNDM7CXU4IGlzX2ZvcmNlX3R4X3N0cmVhbTsKJiM0MzsJdTggaXNfZm9yY2Vfc2Vfb2ZmOwomIzQzOwlfX2xlMTYgcmFfcnVubmluZ19jbnQ7CiYjNDM7CXU4IHJhX3N0YXR1czsKJiM0MzsJdTggbWF4X2FtcGR1X2ZhY3RvcjsKJiM0MzsJdTggdHhfcXVhbGl0eVtNVDc5MjVfU1RBX1NUQVRTX1RYX1FVQUxJVFlfTlVNXTsKJiM0MzsJdTggdHhfcmF0ZV91cF9wZW5hbHR5OwomIzQzOwl1OCBsb3dfdHJhZmZpY19tb2RlOwomIzQzOwl1OCBsb3dfdHJhZmZpY19jb3VudDsKJiM0MzsJdTggbG93X3RyYWZmaWNfZGFzaGJvYXJkOwomIzQzOwl1OCBkeW5hbWljX3NnaV9zdGF0ZTsKJiM0MzsJdTggZHluYW1pY19zZ2lfc2NvcmU7CiYjNDM7CXU4IGR5bmFtaWNfYndfc3RhdGU7CiYjNDM7CXU4IGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlOwomIzQzOwl1OCB2aHRfbm9uX3NwX3JhdGVfc3RhdGU7CiYjNDM7CXU4IHJzdjZbM107CiYjNDM7CXU4IHJzdjdbMl07CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwIHsKJiM0MzsJaW50IHN0YV9yZWNfaWR4OwomIzQzO307CiYjNDM7CiYjNDM7LyogRmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIHNuYXBzaG90LCBtaXJyb3IgR2VuNG0gc3RydWN0IFVOSV9FVkVOVF9TVEFUX1dUQkwuCiYjNDM7ICoKJiM0MzsgKiBUaGUgZmlybXdhcmUgUkEgbWFpbnRhaW5zIHVwIHRvIE1UNzkyNV9BVVRPX1JBVEVfTlVNIGNhbmRpZGF0ZSByYXRlcyBpbgomIzQzOyAqIHJhdGVfY29kZVtdLiByYXRlX2lkeCB0ZWxscyB3aGljaCBlbnRyeSBpcyBjdXJyZW50bHkgaW4gdXNlLCBzbyBhIGR1bXAgY2FuCiYjNDM7ICogcG9pbnQgYXQgaXQgd2l0aCAmIzM0Oy0tJmd0OyYjMzQ7LiBmY2FwIGlzIHRoZSBiYW5kd2lkdGggY2FwYWJpbGl0eSBhbmQgdGhlIGxkcGMvc2dpCiYjNDM7ICogZmxhZ3MgZGVzY3JpYmUgdGhlIHBlci1tb2RlIGNvZGluZy9ndWFyZC1pbnRlcnZhbCB1c2VkIGZvciB0aG9zZSByYXRlcy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSB7CiYjNDM7CV9fbGUxNiB0YWc7CiYjNDM7CV9fbGUxNiBsZW47CiYjNDM7CXU4IHJ4X3JjcGkwOwomIzQzOwl1OCByeF9yY3BpMTsKJiM0MzsJdTggY2JybjsKJiM0MzsJdTggZmNhcDsKJiM0MzsJdTggc3BlX2lkeDsKJiM0MzsJdTggZzI7CQkJLyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlcyMCAqLwomIzQzOwl1OCBnNDsJCQkvKiBTR0kgZW5hYmxlZCwgbm9uLUhFLCBCVzQwICovCiYjNDM7CXU4IGc4OwkJCS8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXODAgKi8KJiM0MzsJdTggZzE2OwkJCS8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXMTYwICovCiYjNDM7CXU4IGcyX2hlOwkJLyogR0ksIEhFLCBCVzIwICovCiYjNDM7CXU4IGc0X2hlOwkJLyogR0ksIEhFLCBCVzQwICovCiYjNDM7CXU4IGc4X2hlOwkJLyogR0ksIEhFLCBCVzgwICovCiYjNDM7CXU4IGcxNl9oZTsJCS8qIEdJLCBIRSwgQlcxNjAgKi8KJiM0MzsJdTggZ2lfZWh0OwkJLyogR0ksIEVIVCAqLwomIzQzOwl1OCBodF9sZHBjOwomIzQzOwl1OCB2aHRfbGRwYzsKJiM0MzsJdTggaGVfbGRwYzsKJiM0MzsJdTggZWh0X2xkcGM7CiYjNDM7CXU4IGFmOwomIzQzOwl1OCByYXRlX2lkeDsJCS8qIGluZGV4IGludG8gcmF0ZV9jb2RlW10gY3VycmVudGx5IGluIHVzZSAqLwomIzQzOwlfX2xlMTYgcmF0ZV9jb2RlW01UNzkyNV9BVVRPX1JBVEVfTlVNXTsKJiM0MzsJX19sZTMyIHJzdls0XTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO2ludAomIzQzO210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggKnN0YV9yZWNfaWR4KTsKJiM0MzsKJiM0Mzt2b2lkCiYjNDM7bXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IF9fbGUzMiBsZV90eHZbM10pOwomIzQzOwomIzQzO3U4CiYjNDM7bXQ3OTI1X3d0YmxfZ2V0X3NnaShjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSwgdTggZmNhcCk7CiYjNDM7CiYjNDM7dTgKJiM0MzttdDc5MjVfd3RibF9nZXRfbGRwYyhjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSk7CiYjNDM7CiYjNDM7Y2hhciAqbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIodTggb2ZkbV9pZHgpOwomIzQzOwomIzQzO2ludCBtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTE2IHdsYW5faWR4LAomIzQzOwkJCSAgICAgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKnJhdGUpOwomIzQzOwomIzQzO2ludCBtdDc5MnhfbWN1X2dldF9zdGF0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsCiYjNDM7CQkJc3RydWN0IG10NzkyNV9zdGFfc3RhdHMgKnN0YXRzKTsKJiM0MzsKJiM0MztpbnQgbXQ3OTI1X21jdV9nZXRfbWliX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsCiYjNDM7CQkJICAgIGNvbnN0IHUzMiAqY291bnRlcnMsIHU4IGNvdW50ZXJfbnVtLAomIzQzOwkJCSAgICB1NjQgKnZhbHVlcyk7CiYjNDM7CiYjNDM7LyogR0VUX1NUQVRfSU5GTyAoVU5JX0NNRF9JRF9HRVRfU1RBVElTVElDUyA9IDB4MjMpLAomIzQzOyAqIHN1Yi1jb21tYW5kIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEuCiYjNDM7ICoKJiM0MzsgKiBAYmFuZF9pZHg6ICAgICAgICAgICAgYmFuZC9CU1MgaW5kZXggKDAuLjMpCiYjNDM7ICogQHJzc2k6ICAgICAgICAgICAgICAgIG91dCwgbW92aW5nLWF2ZXJhZ2UgYmVhY29uIFJTU0kgKGRCbSksIG1heSBiZSBOVUxMCiYjNDM7ICogQHR4X2xpbmtfc3BlZWRfa2JwczogIG91dCwgVFggbGluayBzcGVlZCBpbiBrYml0L3MsIG1heSBiZSBOVUxMCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgYmFuZCYjMzk7cyBsaW5rIHF1YWxpdHkgaXMgbm90IHJlYWR5LgomIzQzOyAqCiYjNDM7ICogTk9URTogZmlybXdhcmUgcHJvdmlkZXMgb25seSBSU1NJIGFuZCBUWCByYXRlIGhlcmUuIFJYIHJhdGUvYmFuZHdpZHRoIGFyZQomIzQzOyAqIG5vdCBpbiB0aGlzIGV2ZW50OyByZWFkIHdjaWQtJmd0O3JhdGUgZm9yIHRoZSBSWCByYXRlLgomIzQzOyAqLwomIzQzO2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsCiYjNDM7CQkJCXM4ICpyc3NpLCB1MzIgKnR4X2xpbmtfc3BlZWRfa2Jwcyk7CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDQyCgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogMTI0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlYnVnZnMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYG10NzkyNWAgd2lyZWxlc3MgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gdGhlIGRyaXZlciYjMzk7cyBmdXp6YWJpbGl0eS4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgZGVidWdmcyBmaWxlLCBgc3RhdHNgLCBmb3IgdGhlIGBtdDc5MjVgIGRyaXZlci4gSXQgaW5jbHVkZXMgYHN0YXRzLmNgLCBgc3RhdHMuaGAgYW5kIG1vZGlmaWVzIGBkZWJ1Z2ZzLmNgIHRvIHJlZ2lzdGVyIHRoZSBmaWxlIGFuZCBhbHNvIGFkZHMgc29tZSBuZXcgZW51bXMgaW4gYG10NzZfY29ubmFjX21jdS5oYC4KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiB0aGlzIGludHJvZHVjZXMgYW55IG5ldyBmdW5jdGlvbmFsIGNvZGUgcGF0aHMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gZnV6emluZy4gVGhlIGBzdGF0c2AgZGVidWdmcyBmaWxlIHNlZW1zIHRvIGJlIHJlYWRpbmcgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZSB2aWEgTUNVIGNvbW1hbmRzLiBEZWJ1Z2ZzIGZpbGVzIGFyZSBnZW5lcmFsbHkgbG93LXByaW9yaXR5IGZvciBmdXp6aW5nLCB1bmxlc3MgdGhlIHBhcnNpbmcgb3Igc3RhdGUgY2hhbmdlIGlzIGNvbXBsZXgsIGJ1dCBoZXJlIGl0JiMzOTtzIGp1c3QgYSBzaW1wbGUgcXVlcnktYW5kLXByaW50IHNpdHVhdGlvbi4KCkxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBGcm9tIGluc3BlY3RpbmcgYG10NzkyNS9kZWJ1Z2ZzLmNgLCB0aGUgcGF0Y2ggY3JlYXRlcyB0aGlzIGRlYnVnZnMgZmlsZSB1c2luZyBgZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlYCBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIGBtdDc5Mnhfc3RhdHNgLiBSaWdodCwgc28gaXQmIzM5O3MgYSBzaW1wbGUgZGVidWdmcyBmaWxlLiBBbGwgdGhlIGFjdHVhbCB3b3JrIGhhcHBlbnMgd2l0aGluIGBtdDc5Mnhfc3RhdHNgLCB3aGljaCBpdHNlbGYgY2FsbHMgdmFyaW91cyBmdW5jdGlvbnMgZGVmaW5lZCBpbiBgc3RhdHMuY2AuIExvb2tpbmcgYXQgdGhvc2UgZnVuY3Rpb25zIOKAkyBgbXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeGAsIGBtdDc5MjVfcHJpbnRfbGFzdF90eF9yYXRlYCwgYW5kIHNvIG9uIOKAkyBpdCYjMzk7cyBjbGVhciB0aGV5JiMzOTtyZSBhbGwgcmVsYXRlZCB0byBnYXRoZXJpbmcgYW5kIHByaW50aW5nIHRoZXNlIHN0YXRzLgoKQXJlIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgKmV4cG9zZWQqIG9yIHVzZWQgb3V0c2lkZSBvZiB0aGUgZGVidWdmcyBlbnRyeT8gSSBuZWVkIHRvIG1ha2Ugc3VyZS4gTm9wZSwgdGhleSYjMzk7cmUgYWxsIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBtdDc5Mnhfc3RhdHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBvZiB0aGVzZSByb3V0aW5lcyBpbiBvdGhlciBwYXRjaGVzIGluIHRoZSBzZXJpZXMuIEJ1dCBmcm9tIHRoZSBwYXRjaCBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eWAgaXMgbm90IHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGlzIHBhdGNoLgoKU28sIGl0JiMzOTtzICpqdXN0KiBhZGRpbmcgYSBkZWJ1Z2ZzIGZpbGUuIEV2ZW4gdGhvdWdoIGl0IGNvbW11bmljYXRlcyB3aXRoIHRoZSBmaXJtd2FyZSB2aWEgTUNVIGNvbW1hbmRzLCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgaXNuJiMzOTt0IGNoYW5naW5nIGhvdyB0aGUgY29yZSBkcml2ZXIgKmZ1bmN0aW9ucyouIE5vdyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHByb21wdCBmb3IgbXkgYW5hbHlzaXMuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHRoaW5ncyBsaWtlOgoKKiAgIE1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgb3IgY29tbWVudHMKKiAgIExvZ2dpbmcgKHByaW50aywgcHJfZXJyKSBvciB0cmFjZXBvaW50cwoqICAgQ29uc3RhbnQvbWFjcm8gY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24gZmxvdwoqICAgVW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMKCkRlYnVnZnMgYWRkaXRpb25zIGZvciBzdGF0aXN0aWNzIGZhbGwgdW5kZXIgdGhlICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUmIzM0OyBjYXRlZ29yeS4gVGhleSBkb24mIzM5O3QgY2hhbmdlIGhvdyB0aGUgZHJpdmVyICpvcGVyYXRlcyouIFNvIGZyb20gdGhlIHByb21wdCwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkFsc28sIEkgaGF2ZSB0byBjb25zaWRlciB0aGF0IGBtdDc5MjVgIGlzIGEgTWVkaWFUZWsgV2ktRmkgNyBkcml2ZXIgKFBDSWUvVVNCKS4gV2hpbGUgbWFjODAyMTFfaHdzaW0gKnNpbXVsYXRlcyogV2ktRmksIGl0IGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIHNwZWNpZmljIGhhcmR3YXJlLiBUaGlzIGRyaXZlciBuZWVkcyByZWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLiBCdXQsIHdhaXQsIGlzIGBtdDc5MjV1YCBhIFVTQiBkcml2ZXI/IFNpbmNlIHRoZSBwcm9tcHQgZ2l2ZXMgVVNCIGEgcGFzcywgY2FuIHN5emthbGxlciBmdXp6IHRoZSBgbXQ3OTI1dWAgZHJpdmVyIHZpYSBgdmhjaWA/IFN5emthbGxlciBoYXMgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHZpYSBkdW1teVxfaGNkL3ZoY2kuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGFzaWRlIHRoZSBQQ0llIHZzIFVTQiBkaXNjdXNzaW9uLCBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IGFkZHMgYSByZWFkIGZ1bmN0aW9uIHRvIGRlYnVnZnMuCgpUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgZGlhZ25vc3RpYyB0b29sLiBJdCBkb2VzbiYjMzk7dCBtb2RpZnkgdGhlIGRyaXZlciYjMzk7cyBmdW5jdGlvbmFsIGJlaGF2aW9yIGluIGFueSB3YXkuIEkmIzM5O20gY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSSBjYW4gbm93IHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBwcm92aWRlIHRoYXQgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgZGVidWdmcyBlbnRyeSB0byBxdWVyeSBhbmQgcHJpbnQgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZS4gSXQgaXMgYSBkaWFnbm9zdGljL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBkcml2ZXImIzM5O3MgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkZWJ1Z2ZzIGVudHJ5IHRvIHF1ZXJ5IGFuZCBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlLiBJdCBpcyBhIGRpYWdub3N0aWMvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEyOjMwLjY5NTc0MjMzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTYxMjcwNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgZGVidWdmcyBlbnRyeSB0byBxdWVyeSBhbmQgcHJpbnQgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZS4gSXQgaXMgYSBkaWFnbm9zdGljL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBkcml2ZXIncyBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEyOjMwLjY5NTc0NzU2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzMTQ4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWU1ZGI1YmQxZDNjY2VjNDk4YmEyMjg0NzJlNzFiNDY4YWFiNGRiNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwOToxMjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaFxcbmluZGV4IDBlZGVkYTU2OWU5YTUuLmJmMGYxMDVjNzg2ZTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhcXG5AQCAtMTQ4Myw2ICsxNDgzLDE3OSBAQCBlbnVtIHtcXG4gXFx0TVRfTklDX0NBUF9FTUxfQ0FQID0gMHgyMixcXG4gfTtcXG4gXFxuK2VudW0ge1xcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQkFTSUMgPSAwLFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19RVUFMSVRZID0gMSxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NUQSA9IDIsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19CVUdfUkVQT1JUID0gMyxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1RYX1NUQVRTID0gNCxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0FMTF9TVEFUUyA9IDUsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19FTUxfU1RBVFMgPSA2LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfUkVHVUxBUl9TVEFUUyA9IDcsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19CU1NfTElOS19RVUFMSVRZID0gOCxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX01MX0NITkxfQ09ORCA9IDksXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMID0gMTAsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX0xBWUVSX1NUQVRTID0gMTI4LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfUFBEVV9MQVRFTkNZID0gMTI5LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQ1VSUkVOVF9UWF9SQVRFID0gMTMwLFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfU0VUX1RYX0JJVFJBVEVfTU9OSVRPUiA9IDEzMSxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0dFVF9QUkVESUNUX1RYX0JJVFJBVEUgPSAxMzIsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19TRVRfQVRQU19UWVBFX1JBVEVfTU9ERSA9IDEzMyxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9CRUFDT05fUkVQT1JUID0gMTM0LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQlNTX0NVUlJFTlRfVFhfUkFURSA9IDEzNSxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0dFVF9CU1NfUFJFRElDVF9UWF9CSVRSQVRFID0gMTM2LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTUFYX05VTVxcbit9O1xcbitcXG4rZW51bSBtdDc5MjVfbWliX2NvdW50ZXIge1xcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfRkNTX0VSUiA9IDAsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XID0gMSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX01QRFUgPSAyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQgPSAzLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfVE9UQUxfQllURSA9IDQsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9WQUxJRF9BTVBEVV9TRiA9IDUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9WQUxJRF9CWVRFID0gNixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0NIQU5ORUxfSURMRSA9IDcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9WRUNfRFJPUCA9IDgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9ERUxJTUlURVJfRkFJTCA9IDksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9WRUNfTUlTTUFUQ0ggPSAxMCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX01EUkRZID0gMTEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSA9IDEyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9MR19NSVhFRF9NRFJEWV9USU1FID0gMTMsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUUgPSAxNCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1BGX0RST1AgPSAxNSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0xFTl9NSVNNQVRDSCA9IDE2LFxcbitcXHRVTklfQ01EX01JQl9DTlRfUF9DQ0FfVElNRSA9IDE3LFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19DQ0FfVElNRSA9IDE4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FID0gMTksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9QX0VEX1RJTUUgPSAyMCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JDTl9UWCA9IDIxLFxcbitcXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMjBNSFogPSAyMixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzQwTUhaID0gMjMsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9CV184ME1IWiA9IDI0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMTYwTUhaID0gMjUsXFxuK1xcdFVOSV9DTURfUk1BQ19DTlRfT0JTU19BSVJUSU1FID0gMjYsXFxuK1xcdFVOSV9DTURfUk1BQ19DTlRfTk9OV0lGSV9BSVJUSU1FID0gMjcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9EVVJfQ05UID0gMjgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9EVVJfQ05UID0gMjksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CQV9DTlQgPSAzMCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX01BQzJQSFlfVFhfVElNRSA9IDMxLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT1VUX09GX1JBTkdFX0NPVU5UID0gMzIsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9JQkZfVFggPSAzMyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0VCRl9UWCA9IDM0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfTVVCRl9UWCA9IDM1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfVkhURkJLID0gMzYsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9CRl9IVEZCSyA9IDM3LFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfSEVGQksgPSAzOCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfVFhGQktfQkZQT0xMX1RSSSA9IDM5LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19UUkkgPSA0MCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfUlhfRkJLQ1FJID0gNDEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1JYX05EUCA9IDQyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfSUJGX1VQVCA9IDQzLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfRUJGX1VQVCA9IDQ0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQkZFRV9TUF9BQk9SVCA9IDQ1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UQl9MRU5fRVJSID0gNDYsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX01VVEUgPSA0NyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfVE1BQ19BQk9SVCA9IDQ4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19DUEwgPSA0OSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfQ09BTlRfQkxLVFggPSA1MCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfRkJLX1NFRyA9IDUxLFxcbitcXHRVTklfQ01EX01JQl9DTlRfTkFWX1RJTUUgPSA1MixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDEgPSA1MyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDAgPSA1NCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDMgPSA1NSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDIgPSA1NixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVCA9IDU3LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMV9SVFNfVFhfQ05UID0gNTgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MyX1JUU19UWF9DTlQgPSA1OSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzNfUlRTX1RYX0NOVCA9IDYwLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfUkVUUlkgPSA2MSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzFfUlRTX1JFVFJZID0gNjIsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MyX1JUU19SRVRSWSA9IDYzLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTM19SVFNfUkVUUlkgPSA2NCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfQkFfTUlTUyA9IDY1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMV9CQV9NSVNTID0gNjYsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MyX0JBX01JU1MgPSA2NyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzNfQkFfTUlTUyA9IDY4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCA9IDY5LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMV9BQ0tfRkFJTCA9IDcwLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMl9BQ0tfRkFJTCA9IDcxLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTM19BQ0tfRkFJTCA9IDcyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSA9IDczLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMV9GUkFNRV9SRVRSWSA9IDc0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMl9GUkFNRV9SRVRSWSA9IDc1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTM19GUkFNRV9SRVRSWSA9IDc2LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8yID0gNzcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MxX0ZSQU1FX1JFVFJZXzIgPSA3OCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzJfRlJBTUVfUkVUUllfMiA9IDc5LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTM19GUkFNRV9SRVRSWV8yID0gODAsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9BMV9TRUFSQ0ggPSA4MSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX0RST1BfTVBEVSA9IDgyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfVU5XQU5URUQgPSA4MyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX0ZDU19PSyA9IDg0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfU1VfVFhfT0sgPSA4NSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0ZVTExfQlcgPSA4NixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FVVE9fQlcgPSA4NyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0NDQV9TQU1QTEVfSURMRSA9IDg4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQ0NBX1NBTVBMRV9BQ1RJVkUgPSA4OSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0NDQV9USU1FID0gOTAsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TXzIwQldfQ0NBX1RJTUUgPSA5MSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfNDBCV19DQ0FfVElNRSA9IDkyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfU184MEJXX0NDQV9USU1FID0gOTMsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TXzE2MEJXX0NDQV9USU1FID0gOTQsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzBfRURfVElNRSA9IDk1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xX0VEX1RJTUUgPSA5NixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMl9FRF9USU1FID0gOTcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzNfRURfVElNRSA9IDk4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV180X0VEX1RJTUUgPSA5OSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfNV9FRF9USU1FID0gMTAwLFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV182X0VEX1RJTUUgPSAxMDEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzdfRURfVElNRSA9IDEwMixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfOF9FRF9USU1FID0gMTAzLFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV185X0VEX1RJTUUgPSAxMDQsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEwX0VEX1RJTUUgPSAxMDUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzExX0VEX1RJTUUgPSAxMDYsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEyX0VEX1RJTUUgPSAxMDcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEzX0VEX1RJTUUgPSAxMDgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzE0X0VEX1RJTUUgPSAxMDksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzE1X0VEX1RJTUUgPSAxMTAsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18zMjBNSFogPSAxMTEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9ERExNVF9STkcwID0gMTEyLCAvKiBSbmcwflJuZzQgMTEyfjExNiAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8zID0gMTE3LCAvKiAxMTd+MTIwICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYID0gMTIxLCAvKiAxMjF+MTI0ICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYX0RBVEEgPSAxMjUsIC8qIDEyNX4xMjggKi9cXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfVFhfQllURSA9IDEyOSwgLyogMTI5fjEzMiAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT0tfQlNTMCA9IDEzMywgLyogMTMzfjEzNiAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQllURV9CU1MwID0gMTM3LCAvKiAxMzd+MTQwICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9EQVRBX0JTUzAgPSAxNDEsIC8qIDE0MX4xNDQgKi9cXG4rXFx0VU5JX0NNRF9NSUJfQ05UX01CU1MwX1RYX09LID0gMTQ1LCAvKiAxNDV+MTYwICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9NQlNTMF9UWF9CWVRFID0gMTYxLCAvKiAxNjF+MTc2ICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9PS19NQlNTMCA9IDE3NywgLyogMTc3fjE5MiAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQllURV9NQlNTMCA9IDE5MywgLyogMTkzfjIwOCAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfQU1QRFUgPSAyMDksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9NUERVID0gMjEwLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfQUNLRUQgPSAyMTEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9NQVhfTlVNXFxuK307XFxuK1xcbitlbnVtIEVOVU1fVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUcge1xcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CQVNJQyA9IDAsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1NUQSA9IDIsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JVR19SRVBPUlQgPSAzLFxcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19FTUxfU1RBVFMgPSA2LFxcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19SRUdVTEFSX1NUQVRTID0gNyxcXG4rXFx0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX0xJTktfUVVBTElUWSA9IDgsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0dFVF9NTF9DSE5MX0NPTkQgPSA5LFxcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19TVEFUX1dUQkwgPSAxMCxcXG4rXFx0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19MQVlFUl9TVEFUUyA9IDB4ODAsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1BQRFVfTEFURU5DWSxcXG4rXFx0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQ1VSUkVOVF9UWF9SQVRFLFxcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CRUFDT05fUkVQT1JUID0gMHg4NixcXG4rXFx0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX0NVUlJFTlRfVFhfUkFURSA9IDB4ODcsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JTU19QUkVEX1RYX0JJVFJBVEUgPSAweDg4LFxcbit9O1xcbitcXG4gI2RlZmluZSBVTklfV09XX0RFVEVDVF9UWVBFX01BR0lDXFx0XFx0QklUKDApXFxuICNkZWZpbmUgVU5JX1dPV19ERVRFQ1RfVFlQRV9BTllcXHRcXHRcXHRCSVQoMSlcXG4gI2RlZmluZSBVTklfV09XX0RFVEVDVF9UWVBFX0RJU0NPTk5FQ1RcXHRcXHRCSVQoMilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVxcbmluZGV4IGY5ZGNjMGJiYTM5M2MuLjM4NjNhODliODk3NDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVxcbkBAIC00LDcgKzQsNyBAQCBvYmotJChDT05GSUdfTVQ3OTI1X0NPTU1PTikgKz0gbXQ3OTI1LWNvbW1vbi5vXFxuIG9iai0kKENPTkZJR19NVDc5MjVFKSArPSBtdDc5MjVlLm9cXG4gb2JqLSQoQ09ORklHX01UNzkyNVUpICs9IG10NzkyNXUub1xcbiBcXG4tbXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xcbittdDc5MjUtY29tbW9uLXkgOj0gbWFjLm8gbWN1Lm8gcmVnZC5vIG1haW4ubyBpbml0Lm8gZGVidWdmcy5vIG5hbi5vIHN0YXRzLm9cXG4gbXQ3OTI1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXFxuIG10NzkyNWUteSA6PSBwY2kubyBwY2lfbWFjLm8gcGNpX21jdS5vXFxuIG10NzkyNXUteSA6PSB1c2Iub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcXG5pbmRleCBkMDFmZjQ5ZGU0N2FmLi43YTQwZDVhYzQ3ZGFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xcbkBAIC0xLDggKzEsMTEgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjMgTWVkaWFUZWsgSW5jLiAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hdGg2NC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcIm10NzkyNS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibWN1LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdGF0cy5oXFxcIlxcbiBcXG4gc3RhdGljIGludFxcbiBtdDc5MjVfcmVnX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbkBAIC0yODYsNiArMjg5LDM0NiBAQCBzdGF0aWMgaW50IG10NzkyNV9jaGlwX3Jlc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuIFxcbiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsIFxcXCIlbGxkXFxcXG5cXFwiKTtcXG4gXFxuK3N0YXRpYyBjb25zdCB1MzIgc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzW10gPSB7XFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9GQ1NfRVJSLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfRklGT19PVkVSRkxPVyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX01QRFUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1BGX0RST1AsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9DSEFOTkVMX0lETEUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9MR19NSVhFRF9NRFJEWV9USU1FLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUF9DQ0FfVElNRSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfQ0NBX1RJTUUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9QX0VEX1RJTUUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CQ05fVFgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9CV180ME1IWixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaLFxcbitcXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMTYwTUhaLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9CQV9NSVNTLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0FNUERVLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0FNUERVX0FDS0VELFxcbit9O1xcbitcXG4rLyogRHVtcCB0aGUgd2hvbGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIGFuZCBtYXJrIHRoZSBlbnRyeSBjdXJyZW50bHkgaW4gdXNlXFxuKyAqIHdpdGggXFxcIi0tXFx1MDAzZVxcXCJcXG4rICovXFxuK3N0YXRpYyB2b2lkXFxuK210NzkyNV9kdW1wX2F1dG9fcmF0ZV90YWJsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IpXFxuK3tcXG4rXFx0dTggZmNhcCA9IHdyLVxcdTAwM2VmY2FwO1xcbitcXHR1OCByYXRlX2lkeCA9IHdyLVxcdTAwM2VyYXRlX2lkeDtcXG4rXFx0dTggY2JybiA9IHdyLVxcdTAwM2VjYnJuO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBDdXIgUmF0ZSBJbmRleCA9ICV1XFxcXG5cXFwiLCBcXFwiIFxcXCIsIHJhdGVfaWR4KTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVDc5MjVfQVVUT19SQVRFX05VTTsgaSsrKSB7XFxuK1xcdFxcdHUxNiByYXRlX2NvZGUgPSBsZTE2X3RvX2NwdSh3ci1cXHUwMDNlcmF0ZV9jb2RlW2ldKTtcXG4rXFx0XFx0dTggdHhtb2RlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTU9ERShyYXRlX2NvZGUpO1xcbitcXHRcXHR1OCByYXRlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTUNTKHJhdGVfY29kZSk7XFxuK1xcdFxcdHU4IG5zdHMgPSBNVDc5MjVfSFdfUkFURV9UT19OU1MocmF0ZV9jb2RlKSArIDE7XFxuK1xcdFxcdHU4IHN0YmMgPSBNVDc5MjVfSFdfUkFURV9UT19TVEJDKHJhdGVfY29kZSk7XFxuK1xcdFxcdHU4IGRjbSA9IE1UNzkyNV9IV19SQVRFX1RPX0RDTShyYXRlX2NvZGUpO1xcbitcXHRcXHR1OCBlcnN1MTA2dCA9IE1UNzkyNV9IV19SQVRFX1RPXzEwNlQocmF0ZV9jb2RlKTtcXG4rXFx0XFx0dTggc2dpID0gbXQ3OTI1X3d0YmxfZ2V0X3NnaSh3ciwgdHhtb2RlLCBmY2FwKTtcXG4rXFx0XFx0dTggbGRwYyA9IG10NzkyNV93dGJsX2dldF9sZHBjKHdyLCB0eG1vZGUpO1xcbitcXHRcXHRjb25zdCBjaGFyICptb2RlX3N0ciA9IFxcXCJOL0FcXFwiO1xcbitcXG4rXFx0XFx0aWYgKGRjbSlcXG4rXFx0XFx0XFx0cmF0ZSA9IE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XFxuK1xcdFxcdGlmIChlcnN1MTA2dClcXG4rXFx0XFx0XFx0cmF0ZSA9IE1UNzkyNV9IV19SQVRFX1VOTUFTS18xMDZUKHJhdGUpO1xcbitcXG4rXFx0XFx0aWYgKHR4bW9kZSBcXHUwMDNjIEFSUkFZX1NJWkUobXQ3OTI1X3R4X21vZGVfc3RyKSlcXG4rXFx0XFx0XFx0bW9kZV9zdHIgPSBtdDc5MjVfdHhfbW9kZV9zdHJbdHhtb2RlXTtcXG4rXFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIlJhdGUgaW5kZXhbJWRdICAgICVzXFxcIiwgaSxcXG4rXFx0XFx0XFx0ICAgcmF0ZV9pZHggPT0gaSA/IFxcXCItLVxcdTAwM2UgXFxcIiA6IFxcXCIgICAgXFxcIik7XFxuK1xcbitcXHRcXHQvKiByYXRlL01DUyBmaWVsZCAqL1xcbitcXHRcXHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltyYXRlIFxcdTAwMjYgMHgzXSk7XFxuK1xcdFxcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXFxuK1xcdFxcdFxcdHNlcV9wcmludGYocywgXFxcIiVzLCBcXFwiLCBtdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cihyYXRlKSk7XFxuK1xcdFxcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XFxuK1xcdFxcdFxcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGKVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCJNQ1MlZCwgXFxcIiwgcmF0ZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMlZF9NQ1MlZCwgXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc3RiYyA/IFxcXCJOU1RTXFxcIiA6IFxcXCJOU1NcXFwiLCBuc3RzLCByYXRlKTtcXG4rXFxuK1xcdFxcdC8qIGJhbmR3aWR0aDogbWlycm9yIHRoZSBDQ0svT0ZETSAtXFx1MDAzZSBCVzIwIGFuZCBjYnJuIGhhbmRsaW5nICovXFxuK1xcdFxcdGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHxcXG4rXFx0XFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXFxuK1xcdFxcdFxcdHNlcV9wcmludGYocywgXFxcIiVzLCBcXFwiLCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbMF0pO1xcbitcXHRcXHRlbHNlIGlmIChpIFxcdTAwM2UgY2JybilcXG4rXFx0XFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMsIFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGZjYXAgXFx1MDAzYyA1ID9cXG4rXFx0XFx0XFx0XFx0ICAgKGZjYXAgXFx1MDAzZSBNVDc5MjVfQldfMjAgP1xcbitcXHRcXHRcXHRcXHQgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXAgLSAxXSA6XFxuK1xcdFxcdFxcdFxcdCAgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0pIDpcXG4rXFx0XFx0XFx0XFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZmNhcCBcXHUwMDNjIDUgPyBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0gOlxcbitcXHRcXHRcXHRcXHQgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbNV0pO1xcbitcXG4rXFx0XFx0LyogR0kgLyBwcmVhbWJsZSAqL1xcbitcXHRcXHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIiwgcmF0ZSBcXHUwMDNjIDQgPyBcXFwiTFBcXFwiIDogXFxcIlNQXFxcIik7XFxuK1xcdFxcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXFxuK1xcdFxcdFxcdDsgLyogT0ZETSBoYXMgbm8gR0kvcHJlYW1ibGUgdG8gcHJpbnQgKi9cXG4rXFx0XFx0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHxcXG4rXFx0XFx0XFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YgfHxcXG4rXFx0XFx0XFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCB8fFxcbitcXHRcXHRcXHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfUExSKVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIiwgc2dpID09IDAgPyBcXFwiTEdJXFxcIiA6IFxcXCJTR0lcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc2dpID09IDAgPyBcXFwiU0dJXFxcIiA6XFxuK1xcdFxcdFxcdFxcdCAgIChzZ2kgPT0gMSA/IFxcXCJNR0lcXFwiIDogXFxcIkxHSVxcXCIpKTtcXG4rXFxuK1xcdFxcdC8qIG1vZGUsIERDTSwgMTA2dCwgU1RCQywgY29kaW5nICovXFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiVzJXMlcyVzJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG1vZGVfc3RyLFxcbitcXHRcXHRcXHQgICBkY20gPyBcXFwiLCBEQ01cXFwiIDogXFxcIlxcXCIsIGVyc3UxMDZ0ID8gXFxcIiwgMTA2dFxcXCIgOiBcXFwiXFxcIixcXG4rXFx0XFx0XFx0ICAgc3RiYyA/IFxcXCIsIFNUQkMsIFxcXCIgOiBcXFwiLCBcXFwiLFxcbitcXHRcXHRcXHQgICAobGRwYyA9PSAwIHx8XFxuK1xcdFxcdFxcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHxcXG4rXFx0XFx0XFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pID9cXG4rXFx0XFx0XFx0ICAgXFxcIkJDQ1xcXCIgOiBcXFwiTERQQ1xcXCIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXQ3OTJ4X3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzOCByc3NpID0gMDtcXG4rXFx0dTggYmFuZF9pZHggPSAwO1xcbitcXHRib29sIHd0YmxfcmF0ZV92YWxpZCA9IGZhbHNlO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IGkgPSAwO1xcbitcXHR1MzIgc3RhdHNfdmFsdWUgPSAwO1xcbitcXHR1MzIgdHhfbGlua19zcGVlZF9rYnBzID0gMDtcXG4rXFx0dTY0IHR4X3RvdGFsID0gMDtcXG4rXFx0dTY0IHR4X2ZhaWwgPSAwO1xcbitcXHR1NjQgdHhfcGVyID0gMDtcXG4rXFx0dTMyIHR4X3Blcl9yZW0gPSAwO1xcbitcXHQvKiBVTklfQ01EX01JQl9EQVRBICovXFxuK1xcdHU2NCBtaWJfdmFsdWVzW0FSUkFZX1NJWkUoc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzKV07XFxuK1xcdHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy1cXHUwMDNlcHJpdmF0ZSk7XFxuK1xcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHd0YmxfcmF0ZTtcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHMgKnN0YXRzID0gTlVMTDtcXG4rXFxuK1xcdGJhbmRfaWR4ID0gZGV2LVxcdTAwM2VtcGh5LmJhbmRfaWR4O1xcbitcXG4rXFx0IHN0YXRzID0ga3phbGxvYyhzaXplb2YoKnN0YXRzKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3RhdHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0LyogR2V0IFNUQV9TVEFUUyAqL1xcbitcXHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xcbitcXHRyZXQgPSBtdDc5MnhfbWN1X2dldF9zdGF0KGRldiwgc3RhdHMpO1xcbitcXHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEdldCBNSUJfU1RBVFMgKi9cXG4rXFx0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcXG4rXFx0cmV0ID0gbXQ3OTI1X21jdV9nZXRfbWliX2luZm8oZGV2LCBiYW5kX2lkeCwgc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICBBUlJBWV9TSVpFKHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyksIG1pYl92YWx1ZXMpO1xcbitcXHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEdldCBMaW5rX1NwZWVkIGFuZCBSU1NJICovXFxuK1xcdG10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7XFxuK1xcdHJldCA9IG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eShkZXYsIHN0YXRzLVxcdTAwM2Vic3NfaWR4LCBcXHUwMDI2cnNzaSwgXFx1MDAyNnR4X2xpbmtfc3BlZWRfa2Jwcyk7XFxuK1xcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogR2V0IHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgKGJlc3QgZWZmb3J0OyBkbyBub3QgYWJvcnQgdGhlXFxuK1xcdCAqIHdob2xlIHN0YXRzIGR1bXAgaWYgdGhlIFdUQkwgcXVlcnkgaXMgbm90IGF2YWlsYWJsZSkuXFxuK1xcdCAqL1xcbitcXHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xcbitcXHRpZiAoIW10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZShkZXYsIHN0YXRzLVxcdTAwM2V3dGJsX2lkeCwgXFx1MDAyNnd0YmxfcmF0ZSkpXFxuK1xcdFxcdHd0YmxfcmF0ZV92YWxpZCA9IHRydWU7XFxuK1xcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XFxuK1xcbitcXHQvKiBQcmludCBTVEFfU1RBVFMgaW5mbyAqL1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIoU1RBKSBjb25uZWN0ZWQgQVAgTUFDIEFkZHJlc3MgPSAlcE1cXFxcblxcXCIsIHN0YXRzLVxcdTAwM2VtYWNfYWRkcik7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBCc3NJZHggPSBbJXVdXFxcXG5cXFwiLCBcXFwiIFxcXCIsIHN0YXRzLVxcdTAwM2Vic3NfaWR4KTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFN0YVJlY0lkeCA9IFsldV1cXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgc3RhdHMtXFx1MDAzZXN0YV9pZHgpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUlNTSSA9ICVkXFxcXG5cXFwiLCBcXFwiIFxcXCIsIHJzc2kpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgTGlua19TcGVlZCA9ICV1IChrYml0L3MpXFxcXG5cXFwiLCBcXFwiIFxcXCIsIHR4X2xpbmtfc3BlZWRfa2Jwcyk7XFxuK1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgdGVtcGVyYXR1cmUgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNldGVtcGVyYXR1cmUpO1xcbitcXG4rXFx0c3RhdHNfdmFsdWUgPSBsZTMyX3RvX2NwdShzdGF0cy1cXHUwMDNldHJhbnNtaXRfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXFx1MDAzZXRyYW5zbWl0X2ZhaWxfY291bnQpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgVHggc3VjY2VzcyA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIHN0YXRzX3ZhbHVlKTtcXG4rXFxuK1xcdHN0YXRzX3ZhbHVlID0gbGUzMl90b19jcHUoc3RhdHMtXFx1MDAzZXR4X2ZhaWxfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXFx1MDAzZXR4X2xpZmVfdGltZW91dF9jb3VudCk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBUeCBmYWlsIHRvIFJjdiBBQ0sgYWZ0ZXIgcmV0cnkgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0c192YWx1ZSk7XFxuK1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggTXBkdSA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VtaWJbYmFuZF9pZHhdLnJ4X21wZHVfY250KSk7XFxuK1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggRmNzIEVycm9yID0gJXUgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VtaWJbYmFuZF9pZHhdLmZjc19lcnJvcikpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggRklGTyBmdWxsID0gJXUgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VtaWJbYmFuZF9pZHhdLnJ4X2ZpZm9fZnVsbCkpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU07IGkrKylcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFRSWF9BR0dfUkFOR0VbJWRdID0gJXUgKFBQRFUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBcXFwiIFxcXCIsIGksIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VtaWJbYmFuZF9pZHhdLnR4X3JhbmdlX2FtcGR1X2NudFtpXSkpO1xcbitcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCA9ICV1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTMyX3RvX2NwdShzdGF0cy1cXHUwMDNlbWliW2JhbmRfaWR4XS5hbXBkdV90eF9zZl9jbnQpKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCB3aXRoIEFDSyByZXBseSA9ICV1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTMyX3RvX2NwdShzdGF0cy1cXHUwMDNlbWliW2JhbmRfaWR4XS5hbXBkdV90eF9hY2tfc2ZfY250KSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICByYXRlMV90eF9jbnQgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTMyX3RvX2NwdShzdGF0cy1cXHUwMDNlcmF0ZTFfdHhfY250KSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICByYXRlMV9mYWlsX2NudCA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VyYXRlMV9mYWlsX2NudCkpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgdHJhaW5fdXAgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTE2X3RvX2NwdShzdGF0cy1cXHUwMDNldHJhaW5fdXApKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIHRyYWluX2Rvd24gPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTE2X3RvX2NwdShzdGF0cy1cXHUwMDNldHJhaW5fZG93bikpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgaXNfZm9yY2VfdHhfc3RyZWFtID0gJXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgc3RhdHMtXFx1MDAzZWlzX2ZvcmNlX3R4X3N0cmVhbSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBpc19mb3JjZV9zZV9vZmYgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlaXNfZm9yY2Vfc2Vfb2ZmKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIG1heF9hbXBkdV9mYWN0b3IgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlbWF4X2FtcGR1X2ZhY3Rvcik7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICB0eF9yYXRlX3VwX3BlbmFsdHkgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNldHhfcmF0ZV91cF9wZW5hbHR5KTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIGxvd190cmFmZmljX21vZGUgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlbG93X3RyYWZmaWNfbW9kZSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBsb3dfdHJhZmZpY19jb3VudCA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIHN0YXRzLVxcdTAwM2Vsb3dfdHJhZmZpY19jb3VudCk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBsb3dfdHJhZmZpY19kYXNoYm9hcmQgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlbG93X3RyYWZmaWNfZGFzaGJvYXJkKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIGR5bmFtaWNfc2dpX3N0YXRlID0gJXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgc3RhdHMtXFx1MDAzZWR5bmFtaWNfc2dpX3N0YXRlKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIGR5bmFtaWNfc2dpX3Njb3JlID0gJXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgc3RhdHMtXFx1MDAzZWR5bmFtaWNfc2dpX3Njb3JlKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIGR5bmFtaWNfYndfc3RhdGUgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlZHluYW1pY19id19zdGF0ZSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIHN0YXRzLVxcdTAwM2VkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICB2aHRfbm9uX3NwX3JhdGVfc3RhdGUgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNldmh0X25vbl9zcF9yYXRlX3N0YXRlKTtcXG4rXFxuK1xcdC8qIERlY29kZSB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCB0byBzaG93IHRoZSBjdXJyZW50IFRYIE1DUyByYXRlICovXFxuK1xcdGlmIChiYW5kX2lkeCBcXHUwMDNjIE1UNzkyNV9TVEFfU1RBVFNfQkFORF9OVU0pXFxuK1xcdFxcdG10NzkyNV9wcmludF9sYXN0X3R4X3JhdGUocywgc3RhdHMtXFx1MDAzZXR4X3ZlY3RvcltiYW5kX2lkeF0udHh2KTtcXG4rXFxuK1xcdC8qIER1bXAgdGhlIHdob2xlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSBhbmQgbWFyayB0aGUgZW50cnkgY3VycmVudGx5ICovXFxuK1xcdGlmICh3dGJsX3JhdGVfdmFsaWQpXFxuK1xcdFxcdG10NzkyNV9kdW1wX2F1dG9fcmF0ZV90YWJsZShzLCBcXHUwMDI2d3RibF9yYXRlKTtcXG4rXFxuK1xcdHNlcV9wdXRzKHMsIFxcXCJcXFxcbm1pYiBzdGF0ZTpcXFxcblxcXCIpO1xcbitcXHQvKiA9PT1SeCBSZWxhdGVkIENvdW50ZXJzPT09ICovXFxuK1xcdHNlcV9wdXRzKHMsIFxcXCI9PT0gUnggUmVsYXRlZCBDb3VudGVycyA9PT1cXFxcblxcXCIpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggd2l0aCBDUkMgPSAlbGx1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfRkNTX0VSUl0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlID0gJWxsdSAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1ddKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFJ4IE1wZHUgPSAlbGx1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfTVBEVV0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggQU1wZHUgPSAlbGx1IChQUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfUlhfQ09VTlRdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFJ4IFBGIERyb3AgPSAlbGx1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUEZfRFJPUF0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggTGVuIE1pc21hdGNoID0gJWxsdSAoUFBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0xFTl9NSVNNQVRDSF0pO1xcbitcXG4rXFx0LyogPT09UGh5L1RpbWluZyBSZWxhdGVkIENvdW50ZXJzPT09ICovXFxuK1xcdHNlcV9wdXRzKHMsIFxcXCJcXFxcbj09PSBQaHkvVGltaW5nIFJlbGF0ZWQgQ291bnRlcnMgPT09XFxcXG5cXFwiKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIENoYW5uZWxJZGxlQ250ID0gJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBDQ0FfTkFWX1R4X1RpbWUgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFJ4X01EUkRZX0NOVCA9ICVsbHUgKFBQRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9NRFJEWV0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgQ0NLX01EUkRZID0gJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIE9GRE1fTURSRFkgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIE9GRE1fR1JFRU5fTURSRFkgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFByaW0gQ0NBIFRpbWUgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0NDQV9USU1FXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBTZWMgQ0NBIFRpbWUgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9TX0NDQV9USU1FXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBQcmltIEVEIFRpbWUgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0VEX1RJTUVdKTtcXG4rXFxuK1xcdC8qID09PVR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYyk9PT0gKi9cXG4rXFx0c2VxX3B1dHMocywgXFxcIlxcXFxuPT09IFR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYykgPT09XFxcXG5cXFwiKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIEJlYWNvblR4Q250ID0gJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQkNOX1RYXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBUeCA0ME1IeiBDbnQgPSAlbGx1ICAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1RYX0JXXzQwTUhaXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBUeCA4ME1IeiBDbnQgPSAlbGx1ICAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1RYX0JXXzgwTUhaXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBUeCAxNjBNSHogQ250ID0gJWxsdSAgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9UWF9CV18xNjBNSFpdKTtcXG4rXFxuK1xcdC8qID09PUJTU0lEWzBdIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi9cXG4rXFx0c2VxX3B1dHMocywgXFxcIlxcXFxuPT09IEJTU0lEWzBdIFJlbGF0ZWQgQ291bnRlcnMgPT09XFxcXG5cXFwiKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIEJBIE1pc3MgQ250ID0gJWxsdSAgKFBQRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0JBX01JU1NdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFJUUyBUeCBDbnQgPSAlbGx1ICAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVF0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgRnJhbWUgUmV0cnkgQ250ID0gJWxsdSAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUlldKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIEZyYW1lIFJldHJ5IDIgQ250ID0gJWxsdSAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMl0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUlRTIFJldHJ5IENudCA9ICVsbHUgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX1JUU19SRVRSWV0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgQWNrIEZhaWxlZCBDbnQgPSAlbGx1IChQUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9BQ0tfRkFJTF0pO1xcbitcXG4rXFx0LyogPT09QU1QRFUgUmVsYXRlZCBDb3VudGVycz09PSAqL1xcbitcXHRzZXFfcHV0cyhzLCBcXFwiXFxcXG49PT0gQU1QRFUgUmVsYXRlZCBDb3VudGVycyA9PT1cXFxcblxcXCIpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgVHggQU1QRFVfUGt0X0NudCA9ICVsbHUgIChQUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFR4IEFNUERVX01QRFVfUGt0X0NudCA9ICVsbHUgIChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgQU1QRFUgVHggc3VjY2VzcyA9ICVsbHUgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF0pO1xcbitcXG4rXFx0dHhfdG90YWwgPSBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV07XFxuK1xcdHR4X2ZhaWwgPSAgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0FNUERVX01QRFVdIC0gbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0FNUERVX0FDS0VEXTtcXG4rXFx0dHhfcGVyID0gdHhfdG90YWwgPT0gMCA/IDAgOiBkaXY2NF91NjQoMTAwMCAqIHR4X2ZhaWwsIHR4X3RvdGFsKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIEFNUERVIFR4IGZhaWwgY291bnQgICA9ICVsbHUgIChNUERVKSwgUEVSPSVsbHUuJTFsbHUlJVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLFxcbitcXHRcXHQgICB0eF9mYWlsLFxcbitcXHRcXHQgICBkaXZfdTY0X3JlbSh0eF9wZXIsIDEwLCBcXHUwMDI2dHhfcGVyX3JlbSksICh1NjQpdHhfcGVyX3JlbSk7XFxuK1xcbitvdXQ6XFxuK1xcdGtmcmVlKHN0YXRzKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkaXI7XFxuQEAgLTMxMyw1ICs2NTYsOCBAQCBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbiBcXHRcXHRcXHRcXHQgICAgbXQ3OTJ4X3BtX3N0YXRzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZGVlcC1zbGVlcFxcXCIsIDA2MDAsIGRpciwgZGV2LCBcXHUwMDI2Zm9wc19kcyk7XFxuIFxcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LVxcdTAwM2VtdDc2LmRldiwgXFxcInN0YXRzXFxcIiwgZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgbXQ3OTJ4X3N0YXRzKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YTQ3OTUzMDYyYmMzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmNcXG5AQCAtMCwwICsxLDU4NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuKy8qIENvcHlyaWdodCAoQykgMjAyNiBNZWRpYVRlayBJbmMuICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJtdDc5MjUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm1jdS5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWFjLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdGF0cy5oXFxcIlxcbitcXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1ZFUlNJT04gMVxcbisjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfVkFMSUQgMVVcXG4rXFxuKyNkZWZpbmUgTVQ3OTI1X01JQl9NQVhfQ05UXFx0XFx0XFx0MzJcXG4rI2RlZmluZSBNVDc5MjVfTUlCX0NOVF9NQVhfTlVNXFx0XFx0NTEyICAvKiBmaXJtd2FyZSBVTklfQ01EX01JQl9DTlRfTUFYX05VTSB1cHBlciBib3VuZCAqL1xcbitcXG4rI2RlZmluZSBNVDc5MjVfTFFfQkFORF9OVU1cXHQ0XFx0XFx0XFx0LyogTGluayBxdWFsaXR5IGJhbmQgKi9cXG4rXFxuK2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfbW9kZV9zdHJbXSA9IHtcXG4rXFx0XFxcIkNDS1xcXCIsIFxcXCJPRkRNXFxcIiwgXFxcIk1NXFxcIiwgXFxcIkdGXFxcIiwgXFxcIlZIVFxcXCIsIFxcXCJQTFJcXFwiLFxcbitcXHRcXFwiUExSUFxcXCIsIFxcXCJBTFJcXFwiLCBcXFwiSEVfU1VcXFwiLCBcXFwiSEVfRVJcXFwiLCBcXFwiSEVfVFJJR1xcXCIsIFxcXCJIRV9NVVxcXCIsXFxuK1xcdFxcXCJFSFRfRVJcXFwiLCBcXFwiVE9GXFxcIiwgXFxcIkVIVF9UUklHXFxcIiwgXFxcIkVIVF9NVVxcXCJcXG4rfTtcXG4rXFxuK2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW10gPSB7XFxuK1xcdFxcXCIxTVxcXCIsIFxcXCIyTVxcXCIsIFxcXCI1LjVNXFxcIiwgXFxcIjExTVxcXCIsIFxcXCJOL0FcXFwiXFxuK307XFxuK1xcbitjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW10gPSB7XFxuK1xcdFxcXCJCVzIwXFxcIiwgXFxcIkJXNDBcXFwiLCBcXFwiQlc4MFxcXCIsIFxcXCJCVzE2MC9CVzgwODBcXFwiLCBcXFwiQlczMjBcXFwiLCBcXFwiTi9BXFxcIlxcbit9O1xcbitcXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfcmVxIHtcXG4rXFx0dTggcnN2WzRdO1xcbitcXHRfX2xlMTYgdGFnO1xcbitcXHRfX2xlMTYgbGVuO1xcbitcXHR1OCBzdGFfcmVjX2lkeDtcXG4rXFx0dTggcnN2MTtcXG4rXFx0dTggbGxzX3JlYWRfY2xlYXI7XFxuK1xcdHU4IHJlc2V0X2NvdW50ZXI7XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19ldmVudCB7XFxuK1xcdHU4IHJzdls0XTtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHMgc3RhdHM7XFxuK30gX19wYWNrZWQ7XFxuK1xcbisvKiBXVEJMIGF1dG8tcmF0ZSByZXF1ZXN0IFRMViwgbWlycm9yIEdlbjRtIHN0cnVjdCBVTklfQ01EX1NUQVRfV1RCTC5cXG4rICogVGhlIFJBIHRhZyByZXVzZXMgVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgKDEwKS5cXG4rICovXFxuK3N0cnVjdCBtdDc5MjVfd3RibF9yYXRlX3JlcSB7XFxuK1xcdHU4IHJzdls0XTtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0X19sZTE2IHdsYW5faWR4O1xcbitcXHRfX2xlMTYgcnN2MTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIFdUQkwgYXV0by1yYXRlIGV2ZW50IFRMVi4gRmlybXdhcmUgYW5zd2VycyBjbWQgdGFnIDEwIHdpdGggZXZlbnQgdGFnIDEyLiAqL1xcbitzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZV9ldmVudCB7XFxuK1xcdHU4IHJzdls0XTtcXG4rXFx0c3RydWN0IG10NzkyNV93dGJsX3JhdGUgcmF0ZTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIGZpeGVkIGZpZWxkLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9JTkZPICovXFxuK3N0cnVjdCBtdDc5MjVfbWliX2hkciB7XFxuK1xcdHU4IGJhbmRfaWR4O1xcbitcXHR1OCByc3ZbM107XFxuK30gX19wYWNrZWQ7XFxuK1xcbisvKiBPbmUgcmVxdWVzdGVkL3JldHVybmVkIE1JQiBjb3VudGVyLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBX1QuICovXFxuK3N0cnVjdCBtdDc5MjVfbWliX2RhdGEge1xcbitcXHRfX2xlMTYgdGFnO1xcdC8qIFVOSV8oQ01EfEVWRU5UKV9NSUJfREFUQSA9IDAgKi9cXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0X19sZTMyIGNvdW50ZXI7XFx0LyogTUlCIGNvdW50ZXIgSUQgKGVudW0gbXQ3OTI1X21pYl9jb3VudGVyKSAqL1xcbitcXHRfX2xlNjQgZGF0YTtcXHQvKiBvbmx5IHZhbGlkIG9uIGV2ZW50OyBpZ25vcmVkIG9uIGNtZCAqL1xcbit9IF9fcGFja2VkO1xcbitcXG4rLyogcGVyLWJhbmQgbGluayBxdWFsaXR5IGVudHJ5LCBtaXJyb3IgVU5JX0xJTktfUVVBTElUWSAqL1xcbitzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSB7XFxuK1xcdHM4IHJzc2k7XFx0XFx0LyogbW92aW5nLWF2ZXJhZ2UgYmVhY29uIFJTU0kgb2YgY29ubmVjdGVkIEFQICovXFxuK1xcdHM4IGxpbmtfcXVhbGl0eTtcXHQvKiBhbHdheXMgMCAqL1xcbitcXHRfX2xlMTYgbGlua19zcGVlZDtcXHQvKiBUWCByYXRlMSwgdW5pdCA1MDAgS2IvcyAqL1xcbitcXHR1OCBtZWRpdW1fYnVzeV9wY3Q7XFx0LyogYWx3YXlzIDAgKi9cXG4rXFx0dTggaXNfcmVhZHk7XFx0XFx0LyogMDogZmllbGRzIGludmFsaWQsIDE6IHZhbGlkICovXFxuK1xcdHU4IHJzdlsyXTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIHJlcXVlc3QgVExWLCBtaXJyb3IgVU5JX0NNRF9MSU5LX1FVQUxJVFkgKGhlYWRlciArIHRhZy9sZW4gb25seSkgKi9cXG4rc3RydWN0IG10NzkyNV9scV9yZXEge1xcbitcXHR1OCByc3ZbNF07XFx0XFx0LyogVU5JX0NNRF9HRVRfU1RBVElTVElDUyBmaXhlZCBmaWVsZCAqL1xcbitcXHRfX2xlMTYgdGFnO1xcdFxcdC8qIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEgKi9cXG4rXFx0X19sZTE2IGxlbjtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIGV2ZW50IFRMViwgbWlycm9yIFVOSV9FVkVOVF9MSU5LX1FVQUxJVFkgKi9cXG4rc3RydWN0IG10NzkyNV9scV9ldmVudCB7XFxuK1xcdHU4IHJzdls0XTtcXHRcXHQvKiBVTklfRVZFTlRfU1RBVElTVElDUyBmaXhlZCBmaWVsZCAqL1xcbitcXHRfX2xlMTYgdGFnO1xcdFxcdC8qIFVOSV9FVkVOVF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSA9IDEgKi9cXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0c3RydWN0IG10NzkyNV9saW5rX3F1YWxpdHkgbHFbTVQ3OTI1X0xRX0JBTkRfTlVNXTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0YXRpYyB2b2lkXFxuK210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHhfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4re1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwICpsb29rdXAgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgbXQ3OTJ4X3ZpZiAqbXZpZjtcXG4rXFx0c3RydWN0IG10NzkyeF9zdGEgKm1zdGE7XFxuK1xcbitcXHRpZiAobG9va3VwLVxcdTAwM2VzdGFfcmVjX2lkeCBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAodmlmLVxcdTAwM2V0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwgIXZpZi1cXHUwMDNlY2ZnLmFzc29jKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtdmlmID0gKHN0cnVjdCBtdDc5MnhfdmlmICopdmlmLVxcdTAwM2VkcnZfcHJpdjtcXG4rXFx0bXN0YSA9IG12aWYtXFx1MDAzZXdlcF9zdGE7XFxuK1xcdGlmICghbXN0YSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFtc3RhLVxcdTAwM2VkZWZsaW5rLndjaWQuc3RhKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRsb29rdXAtXFx1MDAzZXN0YV9yZWNfaWR4ID0gbXN0YS1cXHUwMDNlZGVmbGluay53Y2lkLmlkeDtcXG4rfVxcbitcXG4raW50XFxuK210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggKnN0YV9yZWNfaWR4KVxcbit7XFxuK1xcdHN0cnVjdCBtdDc5MjVfc3RhX3JlY19sb29rdXAgbG9va3VwID0ge1xcbitcXHRcXHQuc3RhX3JlY19pZHggPSAtMSxcXG4rXFx0fTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRldi1cXHUwMDNlbXQ3Ni5tdXRleCk7XFxuK1xcbitcXHRpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhkZXYtXFx1MDAzZW1waHkuaHcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9SRVNVTUVfQUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeF9pdGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxvb2t1cCk7XFxuK1xcbitcXHRpZiAobG9va3VwLnN0YV9yZWNfaWR4IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9UQ09OTjtcXG4rXFxuK1xcdGlmIChsb29rdXAuc3RhX3JlY19pZHggXFx1MDAzZSBVOF9NQVgpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0KnN0YV9yZWNfaWR4ID0gbG9va3VwLnN0YV9yZWNfaWR4O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIERlY29kZSB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCBhbmQgcHJpbnQgdGhlIGxhc3QgVFggcmF0ZSAqL1xcbit2b2lkXFxuK210NzkyNV9wcmludF9sYXN0X3R4X3JhdGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBfX2xlMzIgbGVfdHh2WzNdKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm1vZGVfc3RyID0gXFxcIk4vQVxcXCI7XFxuK1xcdHU4IHJhdGUsIHR4bW9kZSwgZnJtb2RlLCBzZ2ksIGxkcGMsIG5zdHMsIHN0YmMsIHNwZSwgZGNtLCBlcnN1MTA2dDtcXG4rXFx0czggdHhwd3IsIHBvc190eHB3cjtcXG4rXFx0dTMyIHR4dlszXTtcXG4rXFxuK1xcdHR4dlswXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlswXSk7XFxuK1xcdHR4dlsxXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsxXSk7XFxuK1xcdHR4dlsyXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsyXSk7XFxuK1xcbitcXHRpZiAodHh2WzBdID09IDB4ZmZmZmZmZmYpIHtcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgICVzID0gJXNcXFxcblxcXCIsIFxcXCIgXFxcIiwgXFxcIkxhc3QgVFggUmF0ZVxcXCIsIFxcXCJOL0FcXFwiKTtcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgICVzID0gJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIFxcXCIgXFxcIiwgXFxcIkNoaXAgT3V0IFRYIFBvd2VyXFxcIiwgXFxcIk4vQVxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHJhdGUgPSBNVDc5MjVfVFhWX0dFVF9UWF9SQVRFKHR4dik7XFxuK1xcdHR4bW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX01PREUodHh2KTtcXG4rXFx0ZnJtb2RlID0gTVQ3OTI1X1RYVl9HRVRfVFhfRlJNT0RFKHR4dik7XFxuK1xcdG5zdHMgPSBNVDc5MjVfVFhWX0dFVF9UWF9OU1RTKHR4dikgKyAxO1xcbitcXHRzZ2kgPSBNVDc5MjVfVFhWX0dFVF9UWF9TR0kodHh2KTtcXG4rXFx0bGRwYyA9IE1UNzkyNV9UWFZfR0VUX1RYX0xEUEModHh2KTtcXG4rXFx0c3RiYyA9IE1UNzkyNV9UWFZfR0VUX1RYX1NUQkModHh2KTtcXG4rXFx0dHhwd3IgPSBNVDc5MjVfVFhWX0dFVF9UWF9QV1IodHh2KTtcXG4rXFx0c3BlID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1BFX0lEWCh0eHYpO1xcbitcXHRkY20gPSBNVDc5MjVfVFhWX0dFVF9UWF9EQ00odHh2KTtcXG4rXFx0ZXJzdTEwNnQgPSBNVDc5MjVfVFhWX0dFVF9UWF8xMDZUKHR4dik7XFxuK1xcbitcXHRpZiAoZGNtKVxcbitcXHRcXHRyYXRlID0gTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XFxuK1xcdGlmIChlcnN1MTA2dClcXG4rXFx0XFx0cmF0ZSA9IE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfMTA2VChyYXRlKTtcXG4rXFxuK1xcdGlmICh0eG1vZGUgXFx1MDAzYyBBUlJBWV9TSVpFKG10NzkyNV90eF9tb2RlX3N0cikpXFxuK1xcdFxcdG1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07XFxuK1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgJXMgPSBcXFwiLCBcXFwiIFxcXCIsIFxcXCJMYXN0IFRYIFJhdGVcXFwiKTtcXG4rXFxuK1xcdC8qIHJhdGUvTUNTIGZpZWxkICovXFxuK1xcdGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0spXFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiVzLCBcXFwiLFxcbitcXHRcXHRcXHQgICByYXRlIFxcdTAwM2MgNCA/IG10NzkyNV90eF9yYXRlX2Nja19zdHJbcmF0ZV0gOlxcbitcXHRcXHRcXHQgICAoKChyYXRlIFxcdTAwM2U9IDUpIFxcdTAwMjZcXHUwMDI2IChyYXRlIFxcdTAwM2M9IDcpKSA/XFxuK1xcdFxcdFxcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGUgLSA0XSA6XFxuK1xcdFxcdFxcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyWzRdKSk7XFxuK1xcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiVzLCBcXFwiLCBtdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cihyYXRlKSk7XFxuK1xcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XFxuK1xcdFxcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGKVxcbitcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCJNQ1MlZCwgXFxcIiwgcmF0ZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMlZF9NQ1MlZCwgXFxcIixcXG4rXFx0XFx0XFx0ICAgc3RiYyA/IFxcXCJOU1RTXFxcIiA6IFxcXCJOU1NcXFwiLCBuc3RzLCByYXRlKTtcXG4rXFxuK1xcdC8qIGJhbmR3aWR0aCAqL1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIixcXG4rXFx0XFx0ICAgZnJtb2RlIFxcdTAwM2MgNSA/IG10NzkyNV90eF9yYXRlX2J3X3N0cltmcm1vZGVdIDpcXG4rXFx0XFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcXG4rXFxuK1xcdC8qIEdJIC8gcHJlYW1ibGUgKi9cXG4rXFx0aWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSylcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMsIFxcXCIsIHJhdGUgXFx1MDAzYyA0ID8gXFxcIkxQXFxcIiA6IFxcXCJTUFxcXCIpO1xcbitcXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxcbitcXHRcXHQ7IC8qIE9GRE0gaGFzIG5vIEdJL3ByZWFtYmxlIHRvIHByaW50ICovXFxuK1xcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XFxuK1xcdFxcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGIHx8XFxuK1xcdFxcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9WSFQgfHxcXG4rXFx0XFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1BMUilcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMsIFxcXCIsIHNnaSA9PSAwID8gXFxcIkxHSVxcXCIgOiBcXFwiU0dJXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMsIFxcXCIsXFxuK1xcdFxcdFxcdCAgIHNnaSA9PSAwID8gXFxcIlNHSVxcXCIgOiAoc2dpID09IDEgPyBcXFwiTUdJXFxcIiA6IFxcXCJMR0lcXFwiKSk7XFxuK1xcbitcXHQvKiBtb2RlLCBEQ00sIDEwNnQsIFNUQkMsIGNvZGluZywgU1BFICovXFxuK1xcdHNlcV9wcmludGYocywgXFxcIiVzJXMlcyVzJXMlcyVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICBtb2RlX3N0cixcXG4rXFx0XFx0ICAgZGNtID8gXFxcIiwgRENNXFxcIiA6IFxcXCJcXFwiLCBlcnN1MTA2dCA/IFxcXCIsIDEwNnRcXFwiIDogXFxcIlxcXCIsXFxuK1xcdFxcdCAgIHN0YmMgPyBcXFwiLCBTVEJDLCBcXFwiIDogXFxcIiwgXFxcIiwgbGRwYyA9PSAwID8gXFxcIkJDQ1xcXCIgOiBcXFwiTERQQ1xcXCIsXFxuK1xcdFxcdCAgIFxcXCIsIFNQRVxcXCIsIHNwZSk7XFxuK1xcbitcXHQvKiBjaGlwIG91dCBUWCBwb3dlciAodW5pdDogMC41IGRCbSkgKi9cXG4rXFx0cG9zX3R4cHdyID0gKHR4cHdyIFxcdTAwM2MgMCkgPyAofnR4cHdyICsgMSkgOiB0eHB3cjtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgICVzID0gJWMlZC4lMWQgZEJtXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIFxcXCJDaGlwIE91dCBUWCBQb3dlclxcXCIsXFxuK1xcdFxcdCAgICh0eHB3ciBcXHUwMDNjIDApID8gJy0nIDogJysnLFxcbitcXHRcXHQgICAocG9zX3R4cHdyIC8gMiksIDUgKiAocG9zX3R4cHdyICUgMikpO1xcbit9XFxuK1xcbisvKiBHdWFyZCBpbnRlcnZhbCB1c2VkIGZvciB0aGUgYXV0by1yYXRlIGVudHJpZXMsIG1pcnJvciBHZW40bVxcbisgKiBjb25uYWMzeF9nZXRfc2dpX2luZm9fZnJvbV9mdygpOiBwaWNrIHRoZSBwZXItbW9kZS9wZXItQlcgZmxhZy5cXG4rICovXFxuK3U4XFxuK210NzkyNV93dGJsX2dldF9zZ2koY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyLCB1OCB0eG1vZGUsIHU4IGZjYXApXFxuK3tcXG4rXFx0Ym9vbCBoZSA9ICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9TVSB8fFxcbitcXHRcXHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9FUiB8fFxcbitcXHRcXHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHIHx8XFxuK1xcdFxcdCAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VKTtcXG4rXFx0Ym9vbCBlaHQgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX0VSIHx8XFxuK1xcdFxcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfVFJJRyB8fFxcbitcXHRcXHQgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX01VKTtcXG4rXFxuK1xcdGlmIChlaHQpXFxuK1xcdFxcdHJldHVybiB3ci1cXHUwMDNlZ2lfZWh0O1xcbitcXG4rXFx0c3dpdGNoIChmY2FwKSB7XFxuK1xcdGNhc2UgTVQ3OTI1X0JXXzIwOlxcbitcXHRcXHRyZXR1cm4gaGUgPyB3ci1cXHUwMDNlZzJfaGUgOiB3ci1cXHUwMDNlZzI7XFxuK1xcdGNhc2UgTVQ3OTI1X0JXXzQwOlxcbitcXHRcXHRyZXR1cm4gaGUgPyB3ci1cXHUwMDNlZzRfaGUgOiB3ci1cXHUwMDNlZzQ7XFxuK1xcdGNhc2UgTVQ3OTI1X0JXXzgwOlxcbitcXHRcXHRyZXR1cm4gaGUgPyB3ci1cXHUwMDNlZzhfaGUgOiB3ci1cXHUwMDNlZzg7XFxuK1xcdGNhc2UgTVQ3OTI1X0JXXzE2MDpcXG4rXFx0XFx0cmV0dXJuIGhlID8gd3ItXFx1MDAzZWcxNl9oZSA6IHdyLVxcdTAwM2VnMTY7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIENvZGluZyB1c2VkIGZvciB0aGUgYXV0by1yYXRlIGVudHJpZXMsIG1pcnJvciBHZW40bVxcbisgKiBjb25uYWMzeF93dGJsX2dldF9sZHBjX2luZm9fZnJvbV9mdygpOiAwID0gQkNDLCAxID0gTERQQy5cXG4rICovXFxuK3U4XFxuK210NzkyNV93dGJsX2dldF9sZHBjKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlKVxcbit7XFxuK1xcdHN3aXRjaCAodHhtb2RlKSB7XFxuK1xcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWDpcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0Y6XFxuK1xcdFxcdHJldHVybiB3ci1cXHUwMDNlaHRfbGRwYztcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVDpcXG4rXFx0XFx0cmV0dXJuIHdyLVxcdTAwM2V2aHRfbGRwYztcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVOlxcbitcXHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVI6XFxuK1xcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHOlxcbitcXHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfTVU6XFxuK1xcdFxcdHJldHVybiB3ci1cXHUwMDNlaGVfbGRwYztcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUjpcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9UUklHOlxcbitcXHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX01VOlxcbitcXHRcXHRyZXR1cm4gd3ItXFx1MDAzZWVodF9sZHBjO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyAqc3RhdHMpXFxuK3tcXG4rXFx0dTE2IGxlbiA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19ldmVudCAqZXZlbnQgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfcmVxIHJlcSA9IHtcXG4rXFx0XFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19TVEEpLFxcbitcXHRcXHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxcbitcXHRcXHQubGxzX3JlYWRfY2xlYXIgPSBmYWxzZSxcXG4rXFx0XFx0LnJlc2V0X2NvdW50ZXIgPSBmYWxzZSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldCA9IG10NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoZGV2LCBcXHUwMDI2cmVxLnN0YV9yZWNfaWR4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghc3RhdHMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbitcXHRcXHRcXHRcXHRcXHRNQ1VfVU5JX1FVRVJZKEdFVF9TVEFUX0lORk8pLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0ZXZlbnQgPSAoc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRpZiAobGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZXRhZykgIT0gVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NUQSkge1xcbitcXHRcXHRyZXQgPSAtRVBST1RPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bGVuID0gbGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZWxlbik7XFxuK1xcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKmV2ZW50KSAtIHNpemVvZihldmVudC1cXHUwMDNlcnN2KSB8fFxcbitcXHQgICAgbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4gLSBzaXplb2YoZXZlbnQtXFx1MDAzZXJzdikgfHwgIUlTX0FMSUdORUQobGVuLCA0KSkge1xcbitcXHRcXHRyZXQgPSAtRU1TR1NJWkU7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXZlbnQtXFx1MDAzZXN0YXRzLnZlcnNpb24gIT0gTVQ3OTI1X1NUQV9TVEFUU19WRVJTSU9OKSB7XFxuK1xcdFxcdHJldCA9IC1FUFJPVE87XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShsZTMyX3RvX2NwdShldmVudC1cXHUwMDNlc3RhdHMuZmxhZ3MpIFxcdTAwMjYgTVQ3OTI1X1NUQV9TVEFUU19WQUxJRCkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbWNweShzdGF0cywgXFx1MDAyNmV2ZW50LVxcdTAwM2VzdGF0cywgc2l6ZW9mKCpzdGF0cykpO1xcbitcXG4rb3V0OlxcbitcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCBtdDc5MjVfbWN1X2dldF9taWJfaW5mbyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCBiYW5kX2lkeCxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqY291bnRlcnMsIHU4IGNvdW50ZXJfbnVtLFxcbitcXHRcXHRcXHQgICAgdTY0ICp2YWx1ZXMpXFxuK3tcXG4rXFx0dTggKnJlcTtcXG4rXFx0dTggKnRsdiwgKnRsdl9lbmQ7XFxuK1xcdHUxNiByZXFfbGVuO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIgKnJlcV9oZHI7XFxuK1xcdHN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKnJlcV90bHY7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcbitcXHRpZiAoIWNvdW50ZXJzIHx8ICF2YWx1ZXMgfHwgIWNvdW50ZXJfbnVtIHx8XFxuK1xcdCAgICBjb3VudGVyX251bSBcXHUwMDNlIE1UNzkyNV9NSUJfTUFYX0NOVClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBjbGVhciBvdXRwdXQ7IGNvdW50ZXJzIG5vdCByZXR1cm5lZCBieSBmaXJtd2FyZSBzdGF5IDAgKi9cXG4rXFx0bWVtc2V0KHZhbHVlcywgMCwgY291bnRlcl9udW0gKiBzaXplb2YoKnZhbHVlcykpO1xcbitcXG4rXFx0cmVxX2xlbiA9IHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIpICtcXG4rXFx0XFx0ICBjb3VudGVyX251bSAqIHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKTtcXG4rXFxuK1xcdHJlcSA9IGt6YWxsb2MocmVxX2xlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcmVxKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJlcV9oZHIgPSAoc3RydWN0IG10NzkyNV9taWJfaGRyICopcmVxO1xcbitcXHRyZXFfaGRyLVxcdTAwM2ViYW5kX2lkeCA9IGJhbmRfaWR4O1xcbitcXG4rXFx0cmVxX3RsdiA9IChzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICopKHJlcSArIHNpemVvZigqcmVxX2hkcikpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnRlcl9udW07IGkrKykge1xcbitcXHRcXHRyZXFfdGx2W2ldLnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfTUlCX0RBVEEpO1xcbitcXHRcXHRyZXFfdGx2W2ldLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKSk7XFxuK1xcdFxcdHJlcV90bHZbaV0uY291bnRlciA9IGNwdV90b19sZTMyKGNvdW50ZXJzW2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbitcXHRcXHRcXHRcXHRcXHRNQ1VfVU5JX1FVRVJZKEdFVF9NSUJfSU5GTyksIHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0cmVxX2xlbiwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuK1xcdGtmcmVlKHJlcSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSkge1xcbitcXHRcXHRyZXQgPSAtRU1TR1NJWkU7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKiB3YWxrIHRoZSByZXR1cm5lZCBUTFZzLCBtYXRjaCBlYWNoIGNvdW50ZXIgSUQgdG8gdGhlIHJlcXVlc3QgKi9cXG4rXFx0dGx2ID0gc2tiLVxcdTAwM2VkYXRhICsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcik7XFxuK1xcdHRsdl9lbmQgPSBza2ItXFx1MDAzZWRhdGEgKyBza2ItXFx1MDAzZWxlbjtcXG4rXFxuK1xcdHdoaWxlICh0bHYgKyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSkgXFx1MDAzYz0gdGx2X2VuZCkge1xcbitcXHRcXHRzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICpldnRfdGx2ID1cXG4rXFx0XFx0XFx0KHN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKil0bHY7XFxuK1xcdFxcdHUxNiB0YWcgPSBsZTE2X3RvX2NwdShldnRfdGx2LVxcdTAwM2V0YWcpO1xcbitcXHRcXHR1MTYgbGVuID0gbGUxNl90b19jcHUoZXZ0X3Rsdi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0dTMyIGNvdW50ZXI7XFxuK1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpIHx8XFxuK1xcdFxcdCAgICB0bHYgKyBsZW4gXFx1MDAzZSB0bHZfZW5kKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmICh0YWcgPT0gVU5JX0NNRF9NSUJfREFUQSkge1xcbitcXHRcXHRcXHRjb3VudGVyID0gbGUzMl90b19jcHUoZXZ0X3Rsdi1cXHUwMDNlY291bnRlcik7XFxuK1xcbitcXHRcXHRcXHRpZiAoY291bnRlciBcXHUwMDNjIE1UNzkyNV9NSUJfQ05UX01BWF9OVU0pIHtcXG4rXFx0XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50ZXJfbnVtOyBpKyspIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKGNvdW50ZXJzW2ldID09IGNvdW50ZXIpIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dmFsdWVzW2ldID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBsZTY0X3RvX2NwdShldnRfdGx2LVxcdTAwM2VkYXRhKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHRsdiArPSBsZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IDA7XFxuK1xcbitvdXQ6XFxuK1xcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2NoYXIgKm10NzkyNV9od19yYXRlX29mZG1fc3RyKHU4IG9mZG1faWR4KVxcbit7XFxuK1xcdGNoYXIgKiBjb25zdCBvZmRtX3N0cltdID0ge1xcbitcXHRcXHRcXFwiNk1cXFwiLCBcXFwiOU1cXFwiLCBcXFwiMTJNXFxcIiwgXFxcIjE4TVxcXCIsIFxcXCIyNE1cXFwiLCBcXFwiMzZNXFxcIiwgXFxcIjQ4TVxcXCIsIFxcXCI1NE1cXFwiLCBcXFwiTi9BXFxcIlxcbitcXHR9O1xcbitcXG4rXFx0c3dpdGNoIChvZmRtX2lkeCkge1xcbitcXHRjYXNlIDExOiByZXR1cm4gb2ZkbV9zdHJbMF07XFx0LyogNk0gKi9cXG4rXFx0Y2FzZSAxNTogcmV0dXJuIG9mZG1fc3RyWzFdO1xcdC8qIDlNICovXFxuK1xcdGNhc2UgMTA6IHJldHVybiBvZmRtX3N0clsyXTtcXHQvKiAxMk0gKi9cXG4rXFx0Y2FzZSAxNDogcmV0dXJuIG9mZG1fc3RyWzNdO1xcdC8qIDE4TSAqL1xcbitcXHRjYXNlIDk6ICByZXR1cm4gb2ZkbV9zdHJbNF07XFx0LyogMjRNICovXFxuK1xcdGNhc2UgMTM6IHJldHVybiBvZmRtX3N0cls1XTtcXHQvKiAzNk0gKi9cXG4rXFx0Y2FzZSA4OiAgcmV0dXJuIG9mZG1fc3RyWzZdO1xcdC8qIDQ4TSAqL1xcbitcXHRjYXNlIDEyOiByZXR1cm4gb2ZkbV9zdHJbN107XFx0LyogNTRNICovXFxuK1xcdGRlZmF1bHQ6IHJldHVybiBvZmRtX3N0cls4XTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUgLSBmZXRjaCB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIGZvciBhIFdDSURcXG4rICogQGRldjpcXHRkZXZpY2VcXG4rICogQHdsYW5faWR4OlxcdEhXIFdUQkwgLyBXQ0lEIGluZGV4IChzZWUgbXQ3OTI1X3N0YV9zdGF0cy53dGJsX2lkeClcXG4rICogQHJhdGU6XFx0b3V0LCBmaWxsZWQgd2l0aCB0aGUgYXV0by1yYXRlIHRhYmxlIHNuYXBzaG90XFxuKyAqXFxuKyAqIE1pcnJvciBvZiBHZW40bSB3bGFub2lkR2V0U3RhdFd0YmwoKTogc2VuZCBVTklfQ01EX0dFVF9TVEFUX0lORk8gd2l0aCB0aGVcXG4rICogV1RCTCByYXRlIFRMViAoY21kIHRhZyAxMCkgYW5kIHBhcnNlIHRoZSByZXBseSAoZXZlbnQgdGFnIDEyKSBpbnRvIEByYXRlLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLlxcbisgKi9cXG4raW50IG10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MTYgd2xhbl9pZHgsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKnJhdGUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IG10NzkyNV93dGJsX3JhdGVfZXZlbnQgKmV2ZW50ID0gTlVMTDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuK1xcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX3JlcSByZXEgPSB7XFxuK1xcdFxcdC50YWcgPSBjcHVfdG9fbGUxNihVTklfQ01EX0lEX1NUQVRJU1RJQ1NfV1RCTCksXFxuK1xcdFxcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksXFxuK1xcdFxcdC53bGFuX2lkeCA9IGNwdV90b19sZTE2KHdsYW5faWR4KSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsXFxuK1xcdFxcdFxcdFxcdFxcdE1DVV9VTklfUVVFUlkoR0VUX1NUQVRfSU5GTyksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqZXZlbnQpKSB7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICopc2tiLVxcdTAwM2VkYXRhO1xcbitcXG4rXFx0aWYgKGxlMTZfdG9fY3B1KGV2ZW50LVxcdTAwM2VyYXRlLnRhZykgIT0gTVQ3OTI1X1VOSV9FVkVOVF9TVEFUSVNUSUNTX1dUQkwpIHtcXG4rXFx0XFx0cmV0ID0gLUVQUk9UTztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbWNweShyYXRlLCBcXHUwMDI2ZXZlbnQtXFx1MDAzZXJhdGUsIHNpemVvZigqcmF0ZSkpO1xcbitcXHRyZXQgPSAwO1xcbitcXG4rb3V0OlxcbitcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkgLSBxdWVyeSBSU1NJIGFuZCBUWCBsaW5rIHNwZWVkIGZvciBhIGJhbmRcXG4rICogQGRldjpcXHRkZXZpY2VcXG4rICogQGJhbmRfaWR4OlxcdGJhbmQvQlNTIGluZGV4ICgwLi4zKVxcbisgKiBAcnNzaTpcXHRvdXQsIG1vdmluZy1hdmVyYWdlIGJlYWNvbiBSU1NJIGluIGRCbSAobWF5IGJlIE5VTEwpXFxuKyAqIEB0eF9saW5rX3NwZWVkX2ticHM6IG91dCwgVFggcmF0ZSBpbiBrYml0L3MgKG1heSBiZSBOVUxMKVxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgYmFuZCdzIGxpbmsgcXVhbGl0eSBpcyBub3QgcmVhZHkuXFxuKyAqXFxuKyAqIE9ubHkgUlNTSSBhbmQgVFggcmF0ZSBjb21lIGZyb20gZmlybXdhcmUgaGVyZTsgZm9yIFJYIHJhdGUgcmVhZCB3Y2lkLVxcdTAwM2VyYXRlLlxcbisgKi9cXG4raW50IG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCBiYW5kX2lkeCxcXG4rXFx0XFx0XFx0XFx0czggKnJzc2ksIHUzMiAqdHhfbGlua19zcGVlZF9rYnBzKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdHN0cnVjdCBtdDc5MjVfbHFfZXZlbnQgKmV2ZW50O1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSAqbHE7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHN0cnVjdCBtdDc5MjVfbHFfcmVxIHJlcSA9IHtcXG4rXFx0XFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkpLFxcbitcXHRcXHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxcbitcXHR9O1xcbitcXG4rXFx0aWYgKGJhbmRfaWR4IFxcdTAwM2U9IE1UNzkyNV9MUV9CQU5EX05VTSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsXFxuK1xcdFxcdFxcdFxcdFxcdE1DVV9VTklfUVVFUlkoR0VUX1NUQVRfSU5GTyksIFxcdTAwMjZyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqZXZlbnQpKSB7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfbHFfZXZlbnQgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRpZiAobGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZXRhZykgIT0gVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSkge1xcbitcXHRcXHRyZXQgPSAtRVBST1RPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bHEgPSBcXHUwMDI2ZXZlbnQtXFx1MDAzZWxxW2JhbmRfaWR4XTtcXG4rXFx0aWYgKCFscS1cXHUwMDNlaXNfcmVhZHkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyc3NpKVxcbitcXHRcXHQqcnNzaSA9IGxxLVxcdTAwM2Vyc3NpO1xcbitcXG4rXFx0LyogZmlybXdhcmUgcmVwb3J0cyBUWCByYXRlIGluIDUwMCBLYi9zIHVuaXRzIC1cXHUwMDNlIGtiaXQvcyAqL1xcbitcXHRpZiAodHhfbGlua19zcGVlZF9rYnBzKVxcbitcXHRcXHQqdHhfbGlua19zcGVlZF9rYnBzID0gbGUxNl90b19jcHUobHEtXFx1MDAzZWxpbmtfc3BlZWQpICogNTAwO1xcbitcXG4rXFx0cmV0ID0gMDtcXG4rXFxuK291dDpcXG4rXFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTcwYjllYjNhYTgwNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oXFxuQEAgLTAsMCArMSwzMDkgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhciAqL1xcbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYgTWVkaWFUZWsgSW5jLiAqL1xcbitcXG4rI2lmbmRlZiBfX01UNzkyNV9TVEFUU19IXFxuKyNkZWZpbmUgX19NVDc5MjVfU1RBVFNfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vbXQ3Nl9jb25uYWNfbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfQUNfTlVNIDRcXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNIDJcXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0FHR19SQU5HRV9OVU0gMTZcXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1RYX1FVQUxJVFlfTlVNIDRcXG4rI2RlZmluZSBNVDc5MjVfVFhfTU9ERV9OVU0gICAgICAxNlxcbisjZGVmaW5lIE1UNzkyNV9UWF9SQVRFX0NDS19OVU0gIDVcXG4rI2RlZmluZSBNVDc5MjVfVFhfUkFURV9CV19OVU0gICA2XFxuK1xcbisvKiBIVyByYXRlIGNvZGUgKDE2LWJpdCkgZmllbGQgZXh0cmFjdCwgbWlycm9yIEdlbjRtIENPTk5BQzNYX0hXX1RYX1JBVEVfVE9fKi5cXG4rICogVGhlIGF1dG8tcmF0ZSB0YWJsZSBzdG9yZXMgb25lIHJhdGUgY29kZSBwZXIgZW50cnkuXFxuKyAqL1xcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX01DUyhfeClcXHQoKChfeCkgXFx1MDAyNiBHRU5NQVNLKDUsIDApKSBcXHUwMDNlXFx1MDAzZSAwKVxcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX01PREUoX3gpXFx0KCgoX3gpIFxcdTAwMjYgR0VOTUFTSyg5LCA2KSkgXFx1MDAzZVxcdTAwM2UgNilcXG4rI2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19OU1MoX3gpXFx0KCgoX3gpIFxcdTAwMjYgR0VOTUFTSygxMywgMTApKSBcXHUwMDNlXFx1MDAzZSAxMClcXG4rI2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19TVEJDKF94KVxcdCgoKF94KSBcXHUwMDI2IEJJVCgxNCkpIFxcdTAwM2VcXHUwMDNlIDE0KVxcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX0RDTShfeClcXHQoKChfeCkgXFx1MDAyNiBCSVQoNCkpIFxcdTAwM2VcXHUwMDNlIDQpXFxuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fMTA2VChfeClcXHQoKChfeCkgXFx1MDAyNiBCSVQoNSkpIFxcdTAwM2VcXHUwMDNlIDUpXFxuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVU5NQVNLX0RDTShfcilcXHQoKHU4KShfcikgXFx1MDAyNiAweGVmKVxcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1VOTUFTS18xMDZUKF9yKVxcdCgodTgpKF9yKSBcXHUwMDI2IDB4ZGYpXFxuK1xcbisvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIChtaXJyb3IgR2VuNG1cXG4rICogQVVUT19SQVRFX05VTSkuIFJBIGN5Y2xlcyB0aHJvdWdoIHRoZXNlIGFuZCByZXBvcnRzIHdoaWNoIG9uZSBpcyBpbiB1c2VcXG4rICogdmlhIHd0YmwtXFx1MDAzZXJhdGVfaWR4LlxcbisgKi9cXG4rI2RlZmluZSBNVDc5MjVfQVVUT19SQVRFX05VTSA4XFxuK1xcbisvKiBGaXJtd2FyZSBFVkVOVF9TVEFUSVNUSUNTIHN1Yi1ldmVudCB0YWdzLiBUaGUgV1RCTCByYXRlIHJlcXVlc3QgdXNlcyBjbWQgdGFnXFxuKyAqIFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMICgxMCkgYnV0IHRoZSBmaXJtd2FyZSByZXBsaWVzIHdpdGggZXZlbnQgdGFnIDEyLlxcbisgKi9cXG4rI2RlZmluZSBNVDc5MjVfVU5JX0VWRU5UX1NUQVRJU1RJQ1NfV1RCTCAxMlxcbitcXG4rLyogQ09OTkFDM1ggVFggVmVjdG9yIEJCUCBsYXRjaCBiaXQgZmllbGRzIChtaXJyb3IgY21tX2FzaWNfY29ubmFjM3guaCkuXFxuKyAqIFRoZXNlIG9wZXJhdGUgb24gdGhlIDMtRFdPUkQgdHhfdmVjdG9yW2JhbmRdLnR4dlszXSBhcnJheS5cXG4rICovXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUkFURShfdHh2KVxcdCgoX3R4dilbMl0gXFx1MDAyNiAweDdmKVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0xEUEMoX3R4dilcXHQoKChfdHh2KVsyXSBcXHUwMDI2ICgweDEgXFx1MDAzY1xcdTAwM2MgNykpIFxcdTAwM2VcXHUwMDNlIDcpXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyhfdHh2KVxcdCgoKF90eHYpWzBdIFxcdTAwMjYgKDB4MyBcXHUwMDNjXFx1MDAzYyA2KSkgXFx1MDAzZVxcdTAwM2UgNilcXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9GUk1PREUoX3R4dilcXHQoKChfdHh2KVswXSBcXHUwMDI2ICgweDcgXFx1MDAzY1xcdTAwM2MgOCkpIFxcdTAwM2VcXHUwMDNlIDgpXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfTU9ERShfdHh2KVxcdCgoKF90eHYpWzBdIFxcdTAwMjYgKDB4ZiBcXHUwMDNjXFx1MDAzYyAxMikpIFxcdTAwM2VcXHUwMDNlIDEyKVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX05TVFMoX3R4dilcXHQoKChfdHh2KVsyXSBcXHUwMDI2ICgweGZVIFxcdTAwM2NcXHUwMDNjIDI4KSkgXFx1MDAzZVxcdTAwM2UgMjgpXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUFdSKF90eHYpXFx0KCgoX3R4dilbMF0gXFx1MDAyNiAoMHhmZiBcXHUwMDNjXFx1MDAzYyAxNikpIFxcdTAwM2VcXHUwMDNlIDE2KVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NHSShfdHh2KVxcdCgoKF90eHYpWzFdIFxcdTAwMjYgKDB4MyBcXHUwMDNjXFx1MDAzYyAyNikpIFxcdTAwM2VcXHUwMDNlIDI2KVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NQRV9JRFgoX3R4dilcXHQoKChfdHh2KVswXSBcXHUwMDI2ICgweDFmIFxcdTAwM2NcXHUwMDNjIDApKSBcXHUwMDNlXFx1MDAzZSAwKVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0RDTShfdHh2KVxcdCgoKF90eHYpWzJdIFxcdTAwMjYgKDB4MSBcXHUwMDNjXFx1MDAzYyA0KSkgXFx1MDAzZVxcdTAwM2UgNClcXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF8xMDZUKF90eHYpXFx0KCgoX3R4dilbMl0gXFx1MDAyNiAoMHgxIFxcdTAwM2NcXHUwMDNjIDUpKSBcXHUwMDNlXFx1MDAzZSA1KVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfRENNKF9yKVxcdCgodTgpKF9yKSBcXHUwMDI2IDB4ZWYpXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS18xMDZUKF9yKVxcdCgodTgpKF9yKSBcXHUwMDI2IDB4ZGYpXFxuK1xcbitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9tb2RlX3N0cltNVDc5MjVfVFhfTU9ERV9OVU1dO1xcbitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9yYXRlX2Nja19zdHJbTVQ3OTI1X1RYX1JBVEVfQ0NLX05VTV07XFxuK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW01UNzkyNV9UWF9SQVRFX0JXX05VTV07XFxuK1xcbisvKiBUWCByYXRlIG1vZGUsIG1pcnJvciBHZW40bSBUWF9SQVRFX01PREVfKiAoc2VlIG5pY19yYXRlLmgpLiBVc2VkIHRvIGRlY29kZVxcbisgKiBib3RoIHRoZSBUWCBWZWN0b3IgQkJQIGxhdGNoIGFuZCB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIHJhdGUgY29kZXMuXFxuKyAqL1xcbitlbnVtIG10NzkyNV90eF9yYXRlX21vZGUge1xcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0NDSyA9IDAsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSA9IDEsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggPSAyLFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YgPSAzLFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCA9IDQsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfUExSID0gNSxcXG4rXFx0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9TVSA9IDgsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgPSA5LFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1RSSUcgPSAxMCxcXG4rXFx0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9NVSA9IDExLFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUiA9IDEzLFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9UUklHID0gMTQsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX01VID0gMTUsXFxuK307XFxuK1xcbitlbnVtIHtcXG4rXFx0VU5JX0NNRF9NSUJfREFUQSxcXG4rfTtcXG4rXFxuK2VudW0gc3RhdHNfcXVlcnlfbWliX2FycmF5X2luZGV4IHtcXG4rXFx0UVVFUllfTUlCX0NOVF9SWF9GQ1NfRVJSID0gMCxcXG4rXFx0UVVFUllfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XLFxcbitcXHRRVUVSWV9NSUJfQ05UX1JYX01QRFUsXFxuK1xcdFFVRVJZX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQsXFxuK1xcdFFVRVJZX01JQl9DTlRfUEZfRFJPUCxcXG4rXFx0UVVFUllfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXFxuK1xcdFFVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFLFxcbitcXHRRVUVSWV9NSUJfQ05UX0NDQV9OQVZfVFhfVElNRSxcXG4rXFx0UVVFUllfTUlCX0NOVF9NRFJEWSxcXG4rXFx0UVVFUllfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSxcXG4rXFx0UVVFUllfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUUsXFxuK1xcdFFVRVJZX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxcbitcXHRRVUVSWV9NSUJfQ05UX1BfQ0NBX1RJTUUsXFxuK1xcdFFVRVJZX01JQl9DTlRfU19DQ0FfVElNRSxcXG4rXFx0UVVFUllfTUlCX0NOVF9QX0VEX1RJTUUsXFxuK1xcdFFVRVJZX01JQl9DTlRfQkNOX1RYLFxcbitcXHRRVUVSWV9NSUJfQ05UX1RYX0JXXzQwTUhaLFxcbitcXHRRVUVSWV9NSUJfQ05UX1RYX0JXXzgwTUhaLFxcbitcXHRRVUVSWV9NSUJfQ05UX1RYX0JXXzE2ME1IWixcXG4rXFx0UVVFUllfTUlCX0NOVF9CU1MwX0JBX01JU1MsXFxuK1xcdFFVRVJZX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxcbitcXHRRVUVSWV9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUlksXFxuK1xcdFFVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8yLFxcbitcXHRRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxcbitcXHRRVUVSWV9NSUJfQ05UX0JTUzBfQUNLX0ZBSUwsXFxuK1xcdFFVRVJZX01JQl9DTlRfQU1QRFUsXFxuK1xcdFFVRVJZX01JQl9DTlRfQU1QRFVfTVBEVSxcXG4rXFx0UVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRCxcXG4rXFx0UVVFUllfTUlCX0NOVF9NQVhfTlVNLFxcbit9O1xcbitcXG4rZW51bSBzdGF0c190cnhfYWdnX3JhbmdlIHtcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UwX0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UxX0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UyX0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UzX0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U0X0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U1X0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U2X0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U3X0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0VfTUFYX05VTVxcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdE1UNzkyNV9CV18yMCA9IDAsXFxuK1xcdE1UNzkyNV9CV180MCxcXG4rXFx0TVQ3OTI1X0JXXzgwLFxcbitcXHRNVDc5MjVfQldfMTYwLFxcbit9O1xcbitcXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfYWMge1xcbitcXHRfX2xlMzIgdHhfZmFpbDtcXG4rXFx0X19sZTMyIHR4X3JldHJ5O1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfdHhfdmVjdG9yIHtcXG4rXFx0X19sZTMyIHR4dlszXTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX21pYiB7XFxuK1xcdF9fbGUzMiByeF9tcGR1X2NudDtcXG4rXFx0X19sZTMyIGZjc19lcnJvcjtcXG4rXFx0X19sZTMyIHJ4X2ZpZm9fZnVsbDtcXG4rXFx0X19sZTMyIGFtcGR1X3R4X3NmX2NudDtcXG4rXFx0X19sZTMyIGFtcGR1X3R4X2Fja19zZl9jbnQ7XFxuK1xcdF9fbGUzMiB0eF9yYW5nZV9hbXBkdV9jbnRbTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNXTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIEZpcm13YXJlIEVWRU5UX1NUQV9TVEFUSVNUSUNTIGJvZHkuICovXFxuK3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzIHtcXG4rXFx0dTggdmVyc2lvbjtcXG4rXFx0dTggcnN2WzNdO1xcbitcXHRfX2xlMzIgZmxhZ3M7XFxuK1xcbitcXHR1OCBzdGFfaWR4O1xcbitcXHR1OCBic3NfaWR4O1xcbitcXHR1OCB3dGJsX2lkeDtcXG4rXFx0dTggcnN2MTtcXG4rXFxuK1xcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcXG4rXFx0dTggcGVyO1xcbitcXHR1OCByY3BpO1xcbitcXG4rXFx0X19sZTMyIHBoeV9tb2RlO1xcbitcXHRfX2xlMTYgbGlua19zcGVlZDsgLyogMC41IE1iaXQvcyB1bml0cyAqL1xcbitcXHR1OCBsaW5rX3F1YWxpdHk7XFxuK1xcdHU4IGxpbmtfcmVzZXJ2ZWQ7XFxuK1xcbitcXHRfX2xlMzIgdHhfY291bnQ7XFxuK1xcdF9fbGUzMiB0eF9mYWlsX2NvdW50O1xcbitcXHRfX2xlMzIgdHhfbGlmZV90aW1lb3V0X2NvdW50O1xcbitcXHRfX2xlMzIgdHhfZG9uZV9haXJfdGltZTtcXG4rXFx0X19sZTMyIHRyYW5zbWl0X2NvdW50O1xcbitcXHRfX2xlMzIgdHJhbnNtaXRfZmFpbF9jb3VudDtcXG4rXFxuK1xcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2FjIGFjW01UNzkyNV9TVEFfU1RBVFNfQUNfTlVNXTtcXG4rXFxuK1xcdHU4IHRlbXBlcmF0dXJlO1xcbitcXHR1OCBza2lwX2FyO1xcbitcXHR1OCBhcl90YWJsZV9pZHg7XFxuK1xcdHU4IHJhdGVfZW50cnlfaWR4O1xcbitcXHR1OCByYXRlX2VudHJ5X2lkeF9wcmV2O1xcbitcXHR1OCB0eF9zZ2lfZGV0ZWN0X3Bhc3NfY250O1xcbitcXHR1OCBhdmVfcGVyO1xcbitcXHR1OCByc3YyO1xcbitcXG4rXFx0X19sZTMyIGFnZ19yYW5nZV9jdHJsWzJdO1xcbitcXHR1OCByYW5nZV9tb2RlO1xcbitcXHR1OCByc3YzWzNdO1xcbitcXHRfX2xlMzIgYWdnX3JhbmdlX2N0cmxfZXh0WzZdO1xcbitcXG4rXFx0dTggYXJfc3RhdGVfY3VycjtcXG4rXFx0dTggYXJfc3RhdGVfcHJldjtcXG4rXFx0dTggYXJfYWN0aW9uX3R5cGU7XFxuK1xcdHU4IGhpZ2hlc3RfcmF0ZV9jbnQ7XFxuK1xcdHU4IGxvd2VzdF9yYXRlX2NudDtcXG4rXFx0dTggcnN2NDtcXG4rXFx0X19sZTE2IHRyYWluX3VwO1xcbitcXHRfX2xlMTYgdHJhaW5fZG93bjtcXG4rXFx0dTggcnN2NVsyXTtcXG4rXFx0X19sZTMyIHJhdGUxX3R4X2NudDtcXG4rXFx0X19sZTMyIHJhdGUxX2ZhaWxfY250O1xcbitcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfdHhfdmVjdG9yIHR4X3ZlY3RvcltNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNXTtcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfbWliIG1pYltNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNXTtcXG4rXFxuK1xcdHU4IGlzX2ZvcmNlX3R4X3N0cmVhbTtcXG4rXFx0dTggaXNfZm9yY2Vfc2Vfb2ZmO1xcbitcXHRfX2xlMTYgcmFfcnVubmluZ19jbnQ7XFxuK1xcdHU4IHJhX3N0YXR1cztcXG4rXFx0dTggbWF4X2FtcGR1X2ZhY3RvcjtcXG4rXFx0dTggdHhfcXVhbGl0eVtNVDc5MjVfU1RBX1NUQVRTX1RYX1FVQUxJVFlfTlVNXTtcXG4rXFx0dTggdHhfcmF0ZV91cF9wZW5hbHR5O1xcbitcXHR1OCBsb3dfdHJhZmZpY19tb2RlO1xcbitcXHR1OCBsb3dfdHJhZmZpY19jb3VudDtcXG4rXFx0dTggbG93X3RyYWZmaWNfZGFzaGJvYXJkO1xcbitcXHR1OCBkeW5hbWljX3NnaV9zdGF0ZTtcXG4rXFx0dTggZHluYW1pY19zZ2lfc2NvcmU7XFxuK1xcdHU4IGR5bmFtaWNfYndfc3RhdGU7XFxuK1xcdHU4IGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlO1xcbitcXHR1OCB2aHRfbm9uX3NwX3JhdGVfc3RhdGU7XFxuK1xcdHU4IHJzdjZbM107XFxuK1xcdHU4IHJzdjdbMl07XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwIHtcXG4rXFx0aW50IHN0YV9yZWNfaWR4O1xcbit9O1xcbitcXG4rLyogRmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIHNuYXBzaG90LCBtaXJyb3IgR2VuNG0gc3RydWN0IFVOSV9FVkVOVF9TVEFUX1dUQkwuXFxuKyAqXFxuKyAqIFRoZSBmaXJtd2FyZSBSQSBtYWludGFpbnMgdXAgdG8gTVQ3OTI1X0FVVE9fUkFURV9OVU0gY2FuZGlkYXRlIHJhdGVzIGluXFxuKyAqIHJhdGVfY29kZVtdLiByYXRlX2lkeCB0ZWxscyB3aGljaCBlbnRyeSBpcyBjdXJyZW50bHkgaW4gdXNlLCBzbyBhIGR1bXAgY2FuXFxuKyAqIHBvaW50IGF0IGl0IHdpdGggXFxcIi0tXFx1MDAzZVxcXCIuIGZjYXAgaXMgdGhlIGJhbmR3aWR0aCBjYXBhYmlsaXR5IGFuZCB0aGUgbGRwYy9zZ2lcXG4rICogZmxhZ3MgZGVzY3JpYmUgdGhlIHBlci1tb2RlIGNvZGluZy9ndWFyZC1pbnRlcnZhbCB1c2VkIGZvciB0aG9zZSByYXRlcy5cXG4rICovXFxuK3N0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0dTggcnhfcmNwaTA7XFxuK1xcdHU4IHJ4X3JjcGkxO1xcbitcXHR1OCBjYnJuO1xcbitcXHR1OCBmY2FwO1xcbitcXHR1OCBzcGVfaWR4O1xcbitcXHR1OCBnMjtcXHRcXHRcXHQvKiBTR0kgZW5hYmxlZCwgbm9uLUhFLCBCVzIwICovXFxuK1xcdHU4IGc0O1xcdFxcdFxcdC8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXNDAgKi9cXG4rXFx0dTggZzg7XFx0XFx0XFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlc4MCAqL1xcbitcXHR1OCBnMTY7XFx0XFx0XFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlcxNjAgKi9cXG4rXFx0dTggZzJfaGU7XFx0XFx0LyogR0ksIEhFLCBCVzIwICovXFxuK1xcdHU4IGc0X2hlO1xcdFxcdC8qIEdJLCBIRSwgQlc0MCAqL1xcbitcXHR1OCBnOF9oZTtcXHRcXHQvKiBHSSwgSEUsIEJXODAgKi9cXG4rXFx0dTggZzE2X2hlO1xcdFxcdC8qIEdJLCBIRSwgQlcxNjAgKi9cXG4rXFx0dTggZ2lfZWh0O1xcdFxcdC8qIEdJLCBFSFQgKi9cXG4rXFx0dTggaHRfbGRwYztcXG4rXFx0dTggdmh0X2xkcGM7XFxuK1xcdHU4IGhlX2xkcGM7XFxuK1xcdHU4IGVodF9sZHBjO1xcbitcXHR1OCBhZjtcXG4rXFx0dTggcmF0ZV9pZHg7XFx0XFx0LyogaW5kZXggaW50byByYXRlX2NvZGVbXSBjdXJyZW50bHkgaW4gdXNlICovXFxuK1xcdF9fbGUxNiByYXRlX2NvZGVbTVQ3OTI1X0FVVE9fUkFURV9OVU1dO1xcbitcXHRfX2xlMzIgcnN2WzRdO1xcbit9IF9fcGFja2VkO1xcbitcXG4raW50XFxuK210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggKnN0YV9yZWNfaWR4KTtcXG4rXFxuK3ZvaWRcXG4rbXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IF9fbGUzMiBsZV90eHZbM10pO1xcbitcXG4rdThcXG4rbXQ3OTI1X3d0YmxfZ2V0X3NnaShjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSwgdTggZmNhcCk7XFxuK1xcbit1OFxcbittdDc5MjVfd3RibF9nZXRfbGRwYyhjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSk7XFxuK1xcbitjaGFyICptdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cih1OCBvZmRtX2lkeCk7XFxuK1xcbitpbnQgbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUxNiB3bGFuX2lkeCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqcmF0ZSk7XFxuK1xcbitpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyAqc3RhdHMpO1xcbitcXG4raW50IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGJhbmRfaWR4LFxcbitcXHRcXHRcXHQgICAgY29uc3QgdTMyICpjb3VudGVycywgdTggY291bnRlcl9udW0sXFxuK1xcdFxcdFxcdCAgICB1NjQgKnZhbHVlcyk7XFxuK1xcbisvKiBHRVRfU1RBVF9JTkZPIChVTklfQ01EX0lEX0dFVF9TVEFUSVNUSUNTID0gMHgyMyksXFxuKyAqIHN1Yi1jb21tYW5kIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEuXFxuKyAqXFxuKyAqIEBiYW5kX2lkeDogICAgICAgICAgICBiYW5kL0JTUyBpbmRleCAoMC4uMylcXG4rICogQHJzc2k6ICAgICAgICAgICAgICAgIG91dCwgbW92aW5nLWF2ZXJhZ2UgYmVhY29uIFJTU0kgKGRCbSksIG1heSBiZSBOVUxMXFxuKyAqIEB0eF9saW5rX3NwZWVkX2ticHM6ICBvdXQsIFRYIGxpbmsgc3BlZWQgaW4ga2JpdC9zLCBtYXkgYmUgTlVMTFxcbisgKlxcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgYmFuZCdzIGxpbmsgcXVhbGl0eSBpcyBub3QgcmVhZHkuXFxuKyAqXFxuKyAqIE5PVEU6IGZpcm13YXJlIHByb3ZpZGVzIG9ubHkgUlNTSSBhbmQgVFggcmF0ZSBoZXJlLiBSWCByYXRlL2JhbmR3aWR0aCBhcmVcXG4rICogbm90IGluIHRoaXMgZXZlbnQ7IHJlYWQgd2NpZC1cXHUwMDNlcmF0ZSBmb3IgdGhlIFJYIHJhdGUuXFxuKyAqL1xcbitpbnQgbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGJhbmRfaWR4LFxcbitcXHRcXHRcXHRcXHRzOCAqcnNzaSwgdTMyICp0eF9saW5rX3NwZWVkX2ticHMpO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEyOjMxLjMzOTYzNzI2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE5MzE3MzY0MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYSBkZWJ1Z2ZzIGVudHJ5IHRvIHF1ZXJ5IGFuZCBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlLiBJdCBpcyBhIGRpYWdub3N0aWMvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGRyaXZlcidzIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWU1ZGI1YmQxZDNjY2VjNDk4YmEyMjg0NzJlNzFiNDY4YWFiNGRiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA5OjEyOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhcbmluZGV4IDBlZGVkYTU2OWU5YTUuLmJmMGYxMDVjNzg2ZTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oXG5AQCAtMTQ4Myw2ICsxNDgzLDE3OSBAQCBlbnVtIHtcbiBcdE1UX05JQ19DQVBfRU1MX0NBUCA9IDB4MjIsXG4gfTtcbiBcbitlbnVtIHtcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19CQVNJQyA9IDAsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19RVUFMSVRZID0gMSxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19TVEEgPSAyLFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0JVR19SRVBPUlQgPSAzLFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1RYX1NUQVRTID0gNCxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19BTExfU1RBVFMgPSA1LFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0VNTF9TVEFUUyA9IDYsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfUkVHVUxBUl9TVEFUUyA9IDcsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQlNTX0xJTktfUVVBTElUWSA9IDgsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTUxfQ0hOTF9DT05EID0gOSxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMID0gMTAsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19MQVlFUl9TVEFUUyA9IDEyOCxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19QUERVX0xBVEVOQ1kgPSAxMjksXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQ1VSUkVOVF9UWF9SQVRFID0gMTMwLFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9UWF9CSVRSQVRFX01PTklUT1IgPSAxMzEsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfR0VUX1BSRURJQ1RfVFhfQklUUkFURSA9IDEzMixcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19TRVRfQVRQU19UWVBFX1JBVEVfTU9ERSA9IDEzMyxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19TRVRfQkVBQ09OX1JFUE9SVCA9IDEzNCxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19CU1NfQ1VSUkVOVF9UWF9SQVRFID0gMTM1LFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0dFVF9CU1NfUFJFRElDVF9UWF9CSVRSQVRFID0gMTM2LFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX01BWF9OVU1cbit9O1xuK1xuK2VudW0gbXQ3OTI1X21pYl9jb3VudGVyIHtcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9GQ1NfRVJSID0gMCxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XID0gMSxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9NUERVID0gMixcbitcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCA9IDMsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfVE9UQUxfQllURSA9IDQsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfVkFMSURfQU1QRFVfU0YgPSA1LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX1ZBTElEX0JZVEUgPSA2LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0NIQU5ORUxfSURMRSA9IDcsXG4rXHRVTklfQ01EX01JQl9DTlRfVkVDX0RST1AgPSA4LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0RFTElNSVRFUl9GQUlMID0gOSxcbitcdFVOSV9DTURfTUlCX0NOVF9WRUNfTUlTTUFUQ0ggPSAxMCxcbitcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSA9IDExLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FID0gMTIsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9MR19NSVhFRF9NRFJEWV9USU1FID0gMTMsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FID0gMTQsXG4rXHRVTklfQ01EX01JQl9DTlRfUEZfRFJPUCA9IDE1LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0xFTl9NSVNNQVRDSCA9IDE2LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1BfQ0NBX1RJTUUgPSAxNyxcbitcdFVOSV9DTURfTUlCX0NOVF9TX0NDQV9USU1FID0gMTgsXG4rXHRVTklfQ01EX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FID0gMTksXG4rXHRVTklfQ01EX01JQl9DTlRfUF9FRF9USU1FID0gMjAsXG4rXHRVTklfQ01EX01JQl9DTlRfQkNOX1RYID0gMjEsXG4rXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMjBNSFogPSAyMixcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9CV180ME1IWiA9IDIzLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaID0gMjQsXG4rXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMTYwTUhaID0gMjUsXG4rXHRVTklfQ01EX1JNQUNfQ05UX09CU1NfQUlSVElNRSA9IDI2LFxuK1x0VU5JX0NNRF9STUFDX0NOVF9OT05XSUZJX0FJUlRJTUUgPSAyNyxcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9EVVJfQ05UID0gMjgsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfRFVSX0NOVCA9IDI5LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JBX0NOVCA9IDMwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX01BQzJQSFlfVFhfVElNRSA9IDMxLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX09VVF9PRl9SQU5HRV9DT1VOVCA9IDMyLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0lCRl9UWCA9IDMzLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0VCRl9UWCA9IDM0LFxuK1x0VU5JX0NNRF9NSUJfQ05UX01VQkZfVFggPSAzNSxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9CRl9WSFRGQksgPSAzNixcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9CRl9IVEZCSyA9IDM3LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0hFRkJLID0gMzgsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19CRlBPTExfVFJJID0gMzksXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19UUkkgPSA0MCxcbitcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1JYX0ZCS0NRSSA9IDQxLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JGRUVfUlhfTkRQID0gNDIsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfSUJGX1VQVCA9IDQzLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0VCRl9VUFQgPSA0NCxcbitcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1NQX0FCT1JUID0gNDUsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UQl9MRU5fRVJSID0gNDYsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19NVVRFID0gNDcsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UTUFDX0FCT1JUID0gNDgsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19DUEwgPSA0OSxcbitcdFVOSV9DTURfTUlCX0NOVF9CRkVFX0NPQU5UX0JMS1RYID0gNTAsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9GQktfU0VHID0gNTEsXG4rXHRVTklfQ01EX01JQl9DTlRfTkFWX1RJTUUgPSA1MixcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9BQk9SVF9DTlQxID0gNTMsXG4rXHRVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMCA9IDU0LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDMgPSA1NSxcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9BQk9SVF9DTlQyID0gNTYsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05UID0gNTcsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMV9SVFNfVFhfQ05UID0gNTgsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMl9SVFNfVFhfQ05UID0gNTksXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTM19SVFNfVFhfQ05UID0gNjAsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfUkVUUlkgPSA2MSxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MxX1JUU19SRVRSWSA9IDYyLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfUlRTX1JFVFJZID0gNjMsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTM19SVFNfUkVUUlkgPSA2NCxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0JBX01JU1MgPSA2NSxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MxX0JBX01JU1MgPSA2NixcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MyX0JBX01JU1MgPSA2NyxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MzX0JBX01JU1MgPSA2OCxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0FDS19GQUlMID0gNjksXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMV9BQ0tfRkFJTCA9IDcwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfQUNLX0ZBSUwgPSA3MSxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MzX0FDS19GQUlMID0gNzIsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSA9IDczLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzFfRlJBTUVfUkVUUlkgPSA3NCxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MyX0ZSQU1FX1JFVFJZID0gNzUsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTM19GUkFNRV9SRVRSWSA9IDc2LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMiA9IDc3LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzFfRlJBTUVfUkVUUllfMiA9IDc4LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfRlJBTUVfUkVUUllfMiA9IDc5LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzNfRlJBTUVfUkVUUllfMiA9IDgwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ExX1NFQVJDSCA9IDgxLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0RST1BfTVBEVSA9IDgyLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX1VOV0FOVEVEID0gODMsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfRkNTX09LID0gODQsXG4rXHRVTklfQ01EX01JQl9DTlRfU1VfVFhfT0sgPSA4NSxcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9GVUxMX0JXID0gODYsXG4rXHRVTklfQ01EX01JQl9DTlRfVFhfQVVUT19CVyA9IDg3LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9TQU1QTEVfSURMRSA9IDg4LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9TQU1QTEVfQUNUSVZFID0gODksXG4rXHRVTklfQ01EX01JQl9DTlRfQ0NBX1RJTUUgPSA5MCxcbitcdFVOSV9DTURfTUlCX0NOVF9TXzIwQldfQ0NBX1RJTUUgPSA5MSxcbitcdFVOSV9DTURfTUlCX0NOVF9TXzQwQldfQ0NBX1RJTUUgPSA5MixcbitcdFVOSV9DTURfTUlCX0NOVF9TXzgwQldfQ0NBX1RJTUUgPSA5MyxcbitcdFVOSV9DTURfTUlCX0NOVF9TXzE2MEJXX0NDQV9USU1FID0gOTQsXG4rXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18wX0VEX1RJTUUgPSA5NSxcbitcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzFfRURfVElNRSA9IDk2LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMl9FRF9USU1FID0gOTcsXG4rXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18zX0VEX1RJTUUgPSA5OCxcbitcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzRfRURfVElNRSA9IDk5LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfNV9FRF9USU1FID0gMTAwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfNl9FRF9USU1FID0gMTAxLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfN19FRF9USU1FID0gMTAyLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfOF9FRF9USU1FID0gMTAzLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfOV9FRF9USU1FID0gMTA0LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTBfRURfVElNRSA9IDEwNSxcbitcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzExX0VEX1RJTUUgPSAxMDYsXG4rXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xMl9FRF9USU1FID0gMTA3LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTNfRURfVElNRSA9IDEwOCxcbitcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzE0X0VEX1RJTUUgPSAxMDksXG4rXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xNV9FRF9USU1FID0gMTEwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzMyME1IWiA9IDExMSxcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9ERExNVF9STkcwID0gMTEyLCAvKiBSbmcwflJuZzQgMTEyfjExNiAqL1xuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMyA9IDExNywgLyogMTE3fjEyMCAqL1xuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfVFggPSAxMjEsIC8qIDEyMX4xMjQgKi9cbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYX0RBVEEgPSAxMjUsIC8qIDEyNX4xMjggKi9cbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYX0JZVEUgPSAxMjksIC8qIDEyOX4xMzIgKi9cbitcdFVOSV9DTURfTUlCX0NOVF9SWF9PS19CU1MwID0gMTMzLCAvKiAxMzN+MTM2ICovXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfQllURV9CU1MwID0gMTM3LCAvKiAxMzd+MTQwICovXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfREFUQV9CU1MwID0gMTQxLCAvKiAxNDF+MTQ0ICovXG4rXHRVTklfQ01EX01JQl9DTlRfTUJTUzBfVFhfT0sgPSAxNDUsIC8qIDE0NX4xNjAgKi9cbitcdFVOSV9DTURfTUlCX0NOVF9NQlNTMF9UWF9CWVRFID0gMTYxLCAvKiAxNjF+MTc2ICovXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfT0tfTUJTUzAgPSAxNzcsIC8qIDE3N34xOTIgKi9cbitcdFVOSV9DTURfTUlCX0NOVF9SWF9CWVRFX01CU1MwID0gMTkzLCAvKiAxOTN+MjA4ICovXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFUgPSAyMDksXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSA9IDIxMCxcbitcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9BQ0tFRCA9IDIxMSxcbitcdFVOSV9DTURfTUlCX0NOVF9NQVhfTlVNXG4rfTtcbitcbitlbnVtIEVOVU1fVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUcge1xuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQkFTSUMgPSAwLFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19RVUFMSVRZID0gMSxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1NUQSA9IDIsXG4rXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CVUdfUkVQT1JUID0gMyxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0VNTF9TVEFUUyA9IDYsXG4rXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19SRUdVTEFSX1NUQVRTID0gNyxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JTU19MSU5LX1FVQUxJVFkgPSA4LFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfR0VUX01MX0NITkxfQ09ORCA9IDksXG4rXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19TVEFUX1dUQkwgPSAxMCxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfTEFZRVJfU1RBVFMgPSAweDgwLFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfUFBEVV9MQVRFTkNZLFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQ1VSUkVOVF9UWF9SQVRFLFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQkVBQ09OX1JFUE9SVCA9IDB4ODYsXG4rXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CU1NfQ1VSUkVOVF9UWF9SQVRFID0gMHg4NyxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JTU19QUkVEX1RYX0JJVFJBVEUgPSAweDg4LFxuK307XG4rXG4gI2RlZmluZSBVTklfV09XX0RFVEVDVF9UWVBFX01BR0lDXHRcdEJJVCgwKVxuICNkZWZpbmUgVU5JX1dPV19ERVRFQ1RfVFlQRV9BTllcdFx0XHRCSVQoMSlcbiAjZGVmaW5lIFVOSV9XT1dfREVURUNUX1RZUEVfRElTQ09OTkVDVFx0XHRCSVQoMilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlXG5pbmRleCBmOWRjYzBiYmEzOTNjLi4zODYzYTg5Yjg5NzQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlXG5AQCAtNCw3ICs0LDcgQEAgb2JqLSQoQ09ORklHX01UNzkyNV9DT01NT04pICs9IG10NzkyNS1jb21tb24ub1xuIG9iai0kKENPTkZJR19NVDc5MjVFKSArPSBtdDc5MjVlLm9cbiBvYmotJChDT05GSUdfTVQ3OTI1VSkgKz0gbXQ3OTI1dS5vXG4gXG4tbXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xuK210NzkyNS1jb21tb24teSA6PSBtYWMubyBtY3UubyByZWdkLm8gbWFpbi5vIGluaXQubyBkZWJ1Z2ZzLm8gbmFuLm8gc3RhdHMub1xuIG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub1xuIG10NzkyNWUteSA6PSBwY2kubyBwY2lfbWFjLm8gcGNpX21jdS5vXG4gbXQ3OTI1dS15IDo9IHVzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG5pbmRleCBkMDFmZjQ5ZGU0N2FmLi43YTQwZDVhYzQ3ZGFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbkBAIC0xLDggKzEsMTEgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gLyogQ29weXJpZ2h0IChDKSAyMDIzIE1lZGlhVGVrIEluYy4gKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwibXQ3OTI1LmhcIlxuICNpbmNsdWRlIFwibWN1LmhcIlxuKyNpbmNsdWRlIFwic3RhdHMuaFwiXG4gXG4gc3RhdGljIGludFxuIG10NzkyNV9yZWdfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG5AQCAtMjg2LDYgKzI4OSwzNDYgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIFxuIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgXCIlbGxkXFxuXCIpO1xuIFxuK3N0YXRpYyBjb25zdCB1MzIgc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzW10gPSB7XG4rXHRVTklfQ01EX01JQl9DTlRfUlhfRkNTX0VSUixcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX01QRFUsXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQsXG4rXHRVTklfQ01EX01JQl9DTlRfUEZfRFJPUCxcbitcdFVOSV9DTURfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXG4rXHRVTklfQ01EX01JQl9DTlRfQ0hBTk5FTF9JRExFLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9OQVZfVFhfVElNRSxcbitcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUUsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1BfQ0NBX1RJTUUsXG4rXHRVTklfQ01EX01JQl9DTlRfU19DQ0FfVElNRSxcbitcdFVOSV9DTURfTUlCX0NOVF9QX0VEX1RJTUUsXG4rXHRVTklfQ01EX01JQl9DTlRfQkNOX1RYLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzQwTUhaLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzE2ME1IWixcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0JBX01JU1MsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUlksXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8yLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfQUNLX0ZBSUwsXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFUsXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSxcbitcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9BQ0tFRCxcbit9O1xuK1xuKy8qIER1bXAgdGhlIHdob2xlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSBhbmQgbWFyayB0aGUgZW50cnkgY3VycmVudGx5IGluIHVzZVxuKyAqIHdpdGggXCItLVx1MDAzZVwiXG4rICovXG4rc3RhdGljIHZvaWRcbittdDc5MjVfZHVtcF9hdXRvX3JhdGVfdGFibGUoc3RydWN0IHNlcV9maWxlICpzLFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IpXG4re1xuK1x0dTggZmNhcCA9IHdyLVx1MDAzZWZjYXA7XG4rXHR1OCByYXRlX2lkeCA9IHdyLVx1MDAzZXJhdGVfaWR4O1xuK1x0dTggY2JybiA9IHdyLVx1MDAzZWNicm47XG4rXHRpbnQgaTtcbitcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgQ3VyIFJhdGUgSW5kZXggPSAldVxcblwiLCBcIiBcIiwgcmF0ZV9pZHgpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3OTI1X0FVVE9fUkFURV9OVU07IGkrKykge1xuK1x0XHR1MTYgcmF0ZV9jb2RlID0gbGUxNl90b19jcHUod3ItXHUwMDNlcmF0ZV9jb2RlW2ldKTtcbitcdFx0dTggdHhtb2RlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTU9ERShyYXRlX2NvZGUpO1xuK1x0XHR1OCByYXRlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTUNTKHJhdGVfY29kZSk7XG4rXHRcdHU4IG5zdHMgPSBNVDc5MjVfSFdfUkFURV9UT19OU1MocmF0ZV9jb2RlKSArIDE7XG4rXHRcdHU4IHN0YmMgPSBNVDc5MjVfSFdfUkFURV9UT19TVEJDKHJhdGVfY29kZSk7XG4rXHRcdHU4IGRjbSA9IE1UNzkyNV9IV19SQVRFX1RPX0RDTShyYXRlX2NvZGUpO1xuK1x0XHR1OCBlcnN1MTA2dCA9IE1UNzkyNV9IV19SQVRFX1RPXzEwNlQocmF0ZV9jb2RlKTtcbitcdFx0dTggc2dpID0gbXQ3OTI1X3d0YmxfZ2V0X3NnaSh3ciwgdHhtb2RlLCBmY2FwKTtcbitcdFx0dTggbGRwYyA9IG10NzkyNV93dGJsX2dldF9sZHBjKHdyLCB0eG1vZGUpO1xuK1x0XHRjb25zdCBjaGFyICptb2RlX3N0ciA9IFwiTi9BXCI7XG4rXG4rXHRcdGlmIChkY20pXG4rXHRcdFx0cmF0ZSA9IE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XG4rXHRcdGlmIChlcnN1MTA2dClcbitcdFx0XHRyYXRlID0gTVQ3OTI1X0hXX1JBVEVfVU5NQVNLXzEwNlQocmF0ZSk7XG4rXG4rXHRcdGlmICh0eG1vZGUgXHUwMDNjIEFSUkFZX1NJWkUobXQ3OTI1X3R4X21vZGVfc3RyKSlcbitcdFx0XHRtb2RlX3N0ciA9IG10NzkyNV90eF9tb2RlX3N0clt0eG1vZGVdO1xuK1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiUmF0ZSBpbmRleFslZF0gICAgJXNcIiwgaSxcbitcdFx0XHQgICByYXRlX2lkeCA9PSBpID8gXCItLVx1MDAzZSBcIiA6IFwiICAgIFwiKTtcbitcbitcdFx0LyogcmF0ZS9NQ1MgZmllbGQgKi9cbitcdFx0aWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSylcbitcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLFxuK1x0XHRcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltyYXRlIFx1MDAyNiAweDNdKTtcbitcdFx0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSlcbitcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLCBtdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cihyYXRlKSk7XG4rXHRcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XG4rXHRcdFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YpXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIk1DUyVkLCBcIiwgcmF0ZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJXMlZF9NQ1MlZCwgXCIsXG4rXHRcdFx0XHQgICBzdGJjID8gXCJOU1RTXCIgOiBcIk5TU1wiLCBuc3RzLCByYXRlKTtcbitcbitcdFx0LyogYmFuZHdpZHRoOiBtaXJyb3IgdGhlIENDSy9PRkRNIC1cdTAwM2UgQlcyMCBhbmQgY2JybiBoYW5kbGluZyAqL1xuK1x0XHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLIHx8XG4rXHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuK1x0XHRcdHNlcV9wcmludGYocywgXCIlcywgXCIsIG10NzkyNV90eF9yYXRlX2J3X3N0clswXSk7XG4rXHRcdGVsc2UgaWYgKGkgXHUwMDNlIGNicm4pXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIiVzLCBcIixcbitcdFx0XHRcdCAgIGZjYXAgXHUwMDNjIDUgP1xuK1x0XHRcdFx0ICAgKGZjYXAgXHUwMDNlIE1UNzkyNV9CV18yMCA/XG4rXHRcdFx0XHQgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXAgLSAxXSA6XG4rXHRcdFx0XHQgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXBdKSA6XG4rXHRcdFx0XHQgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbNV0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIiVzLCBcIixcbitcdFx0XHRcdCAgIGZjYXAgXHUwMDNjIDUgPyBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0gOlxuK1x0XHRcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcbitcbitcdFx0LyogR0kgLyBwcmVhbWJsZSAqL1xuK1x0XHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxuK1x0XHRcdHNlcV9wcmludGYocywgXCIlcywgXCIsIHJhdGUgXHUwMDNjIDQgPyBcIkxQXCIgOiBcIlNQXCIpO1xuK1x0XHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuK1x0XHRcdDsgLyogT0ZETSBoYXMgbm8gR0kvcHJlYW1ibGUgdG8gcHJpbnQgKi9cbitcdFx0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHxcbitcdFx0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiB8fFxuK1x0XHRcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9WSFQgfHxcbitcdFx0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfUExSKVxuK1x0XHRcdHNlcV9wcmludGYocywgXCIlcywgXCIsIHNnaSA9PSAwID8gXCJMR0lcIiA6IFwiU0dJXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIiVzLCBcIixcbitcdFx0XHRcdCAgIHNnaSA9PSAwID8gXCJTR0lcIiA6XG4rXHRcdFx0XHQgICAoc2dpID09IDEgPyBcIk1HSVwiIDogXCJMR0lcIikpO1xuK1xuK1x0XHQvKiBtb2RlLCBEQ00sIDEwNnQsIFNUQkMsIGNvZGluZyAqL1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXMlcyVzJXMlc1xcblwiLFxuK1x0XHRcdCAgIG1vZGVfc3RyLFxuK1x0XHRcdCAgIGRjbSA/IFwiLCBEQ01cIiA6IFwiXCIsIGVyc3UxMDZ0ID8gXCIsIDEwNnRcIiA6IFwiXCIsXG4rXHRcdFx0ICAgc3RiYyA/IFwiLCBTVEJDLCBcIiA6IFwiLCBcIixcbitcdFx0XHQgICAobGRwYyA9PSAwIHx8XG4rXHRcdFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSyB8fFxuK1x0XHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKSA/XG4rXHRcdFx0ICAgXCJCQ0NcIiA6IFwiTERQQ1wiKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBtdDc5Mnhfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxuK3tcbitcdHM4IHJzc2kgPSAwO1xuK1x0dTggYmFuZF9pZHggPSAwO1xuK1x0Ym9vbCB3dGJsX3JhdGVfdmFsaWQgPSBmYWxzZTtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IGkgPSAwO1xuK1x0dTMyIHN0YXRzX3ZhbHVlID0gMDtcbitcdHUzMiB0eF9saW5rX3NwZWVkX2ticHMgPSAwO1xuK1x0dTY0IHR4X3RvdGFsID0gMDtcbitcdHU2NCB0eF9mYWlsID0gMDtcbitcdHU2NCB0eF9wZXIgPSAwO1xuK1x0dTMyIHR4X3Blcl9yZW0gPSAwO1xuK1x0LyogVU5JX0NNRF9NSUJfREFUQSAqL1xuK1x0dTY0IG1pYl92YWx1ZXNbQVJSQVlfU0laRShzdGF0c19xdWVyeV9taWJfY291bnRlcnMpXTtcbitcdHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy1cdTAwM2Vwcml2YXRlKTtcbitcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHd0YmxfcmF0ZTtcbitcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cyA9IE5VTEw7XG4rXG4rXHRiYW5kX2lkeCA9IGRldi1cdTAwM2VtcGh5LmJhbmRfaWR4O1xuK1xuK1x0IHN0YXRzID0ga3phbGxvYyhzaXplb2YoKnN0YXRzKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXN0YXRzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdC8qIEdldCBTVEFfU1RBVFMgKi9cbitcdG10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7XG4rXHRyZXQgPSBtdDc5MnhfbWN1X2dldF9zdGF0KGRldiwgc3RhdHMpO1xuK1x0bXQ3OTJ4X211dGV4X3JlbGVhc2UoZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogR2V0IE1JQl9TVEFUUyAqL1xuK1x0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcbitcdHJldCA9IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKGRldiwgYmFuZF9pZHgsIHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyxcbitcdFx0XHRcdCAgICAgIEFSUkFZX1NJWkUoc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzKSwgbWliX3ZhbHVlcyk7XG4rXHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBHZXQgTGlua19TcGVlZCBhbmQgUlNTSSAqL1xuK1x0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcbitcdHJldCA9IG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eShkZXYsIHN0YXRzLVx1MDAzZWJzc19pZHgsIFx1MDAyNnJzc2ksIFx1MDAyNnR4X2xpbmtfc3BlZWRfa2Jwcyk7XG4rXHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBHZXQgdGhlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSAoYmVzdCBlZmZvcnQ7IGRvIG5vdCBhYm9ydCB0aGVcbitcdCAqIHdob2xlIHN0YXRzIGR1bXAgaWYgdGhlIFdUQkwgcXVlcnkgaXMgbm90IGF2YWlsYWJsZSkuXG4rXHQgKi9cbitcdG10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7XG4rXHRpZiAoIW10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZShkZXYsIHN0YXRzLVx1MDAzZXd0YmxfaWR4LCBcdTAwMjZ3dGJsX3JhdGUpKVxuK1x0XHR3dGJsX3JhdGVfdmFsaWQgPSB0cnVlO1xuK1x0bXQ3OTJ4X211dGV4X3JlbGVhc2UoZGV2KTtcbitcbitcdC8qIFByaW50IFNUQV9TVEFUUyBpbmZvICovXG4rXHRzZXFfcHJpbnRmKHMsIFwiKFNUQSkgY29ubmVjdGVkIEFQIE1BQyBBZGRyZXNzID0gJXBNXFxuXCIsIHN0YXRzLVx1MDAzZW1hY19hZGRyKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgQnNzSWR4ID0gWyV1XVxcblwiLCBcIiBcIiwgc3RhdHMtXHUwMDNlYnNzX2lkeCk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFN0YVJlY0lkeCA9IFsldV1cXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZXN0YV9pZHgpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBSU1NJID0gJWRcXG5cIiwgXCIgXCIsIHJzc2kpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBMaW5rX1NwZWVkID0gJXUgKGtiaXQvcylcXG5cIiwgXCIgXCIsIHR4X2xpbmtfc3BlZWRfa2Jwcyk7XG4rXG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIHRlbXBlcmF0dXJlID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZXRlbXBlcmF0dXJlKTtcbitcbitcdHN0YXRzX3ZhbHVlID0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHJhbnNtaXRfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHJhbnNtaXRfZmFpbF9jb3VudCk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFR4IHN1Y2Nlc3MgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgc3RhdHNfdmFsdWUpO1xuK1xuK1x0c3RhdHNfdmFsdWUgPSBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2V0eF9mYWlsX2NvdW50KSAtIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZXR4X2xpZmVfdGltZW91dF9jb3VudCk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFR4IGZhaWwgdG8gUmN2IEFDSyBhZnRlciByZXRyeSA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0c192YWx1ZSk7XG4rXG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJ4IE1wZHUgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5yeF9tcGR1X2NudCkpO1xuK1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBSeCBGY3MgRXJyb3IgPSAldSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0uZmNzX2Vycm9yKSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJ4IEZJRk8gZnVsbCA9ICV1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5yeF9maWZvX2Z1bGwpKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU07IGkrKylcbitcdFx0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBUUlhfQUdHX1JBTkdFWyVkXSA9ICV1IChQUERVKVxcblwiLFxuK1x0XHRcdCAgIFwiIFwiLCBpLCBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2VtaWJbYmFuZF9pZHhdLnR4X3JhbmdlX2FtcGR1X2NudFtpXSkpO1xuK1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBNUERVcyBpbiBBTVBEVXMgdHJhbnNtaXR0ZWQgPSAldSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0uYW1wZHVfdHhfc2ZfY250KSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCB3aXRoIEFDSyByZXBseSA9ICV1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5hbXBkdV90eF9hY2tfc2ZfY250KSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIHJhdGUxX3R4X2NudCA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2VyYXRlMV90eF9jbnQpKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgcmF0ZTFfZmFpbF9jbnQgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlcmF0ZTFfZmFpbF9jbnQpKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgdHJhaW5fdXAgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUxNl90b19jcHUoc3RhdHMtXHUwMDNldHJhaW5fdXApKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgdHJhaW5fZG93biA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBsZTE2X3RvX2NwdShzdGF0cy1cdTAwM2V0cmFpbl9kb3duKSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIGlzX2ZvcmNlX3R4X3N0cmVhbSA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0cy1cdTAwM2Vpc19mb3JjZV90eF9zdHJlYW0pO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBpc19mb3JjZV9zZV9vZmYgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgc3RhdHMtXHUwMDNlaXNfZm9yY2Vfc2Vfb2ZmKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgbWF4X2FtcGR1X2ZhY3RvciA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0cy1cdTAwM2VtYXhfYW1wZHVfZmFjdG9yKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgdHhfcmF0ZV91cF9wZW5hbHR5ID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZXR4X3JhdGVfdXBfcGVuYWx0eSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIGxvd190cmFmZmljX21vZGUgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgc3RhdHMtXHUwMDNlbG93X3RyYWZmaWNfbW9kZSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIGxvd190cmFmZmljX2NvdW50ID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZWxvd190cmFmZmljX2NvdW50KTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgbG93X3RyYWZmaWNfZGFzaGJvYXJkID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZWxvd190cmFmZmljX2Rhc2hib2FyZCk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIGR5bmFtaWNfc2dpX3N0YXRlID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZWR5bmFtaWNfc2dpX3N0YXRlKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgZHluYW1pY19zZ2lfc2NvcmUgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgc3RhdHMtXHUwMDNlZHluYW1pY19zZ2lfc2NvcmUpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBkeW5hbWljX2J3X3N0YXRlID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZWR5bmFtaWNfYndfc3RhdGUpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0cy1cdTAwM2VkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIHZodF9ub25fc3BfcmF0ZV9zdGF0ZSA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0cy1cdTAwM2V2aHRfbm9uX3NwX3JhdGVfc3RhdGUpO1xuK1xuK1x0LyogRGVjb2RlIHRoZSBUWCBWZWN0b3IgQkJQIGxhdGNoIHRvIHNob3cgdGhlIGN1cnJlbnQgVFggTUNTIHJhdGUgKi9cbitcdGlmIChiYW5kX2lkeCBcdTAwM2MgTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTSlcbitcdFx0bXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZShzLCBzdGF0cy1cdTAwM2V0eF92ZWN0b3JbYmFuZF9pZHhdLnR4dik7XG4rXG4rXHQvKiBEdW1wIHRoZSB3aG9sZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgYW5kIG1hcmsgdGhlIGVudHJ5IGN1cnJlbnRseSAqL1xuK1x0aWYgKHd0YmxfcmF0ZV92YWxpZClcbitcdFx0bXQ3OTI1X2R1bXBfYXV0b19yYXRlX3RhYmxlKHMsIFx1MDAyNnd0YmxfcmF0ZSk7XG4rXG4rXHRzZXFfcHV0cyhzLCBcIlxcbm1pYiBzdGF0ZTpcXG5cIik7XG4rXHQvKiA9PT1SeCBSZWxhdGVkIENvdW50ZXJzPT09ICovXG4rXHRzZXFfcHV0cyhzLCBcIj09PSBSeCBSZWxhdGVkIENvdW50ZXJzID09PVxcblwiKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnggd2l0aCBDUkMgPSAlbGx1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1JYX0ZDU19FUlJdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlID0gJWxsdSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJ4IE1wZHUgPSAlbGx1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1JYX01QRFVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnggQU1wZHUgPSAlbGx1IChQUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0FNUERVX1JYX0NPVU5UXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJ4IFBGIERyb3AgPSAlbGx1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1BGX0RST1BdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnggTGVuIE1pc21hdGNoID0gJWxsdSAoUFBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9MRU5fTUlTTUFUQ0hdKTtcbitcbitcdC8qID09PVBoeS9UaW1pbmcgUmVsYXRlZCBDb3VudGVycz09PSAqL1xuK1x0c2VxX3B1dHMocywgXCJcXG49PT0gUGh5L1RpbWluZyBSZWxhdGVkIENvdW50ZXJzID09PVxcblwiKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgQ2hhbm5lbElkbGVDbnQgPSAlbGx1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIENDQV9OQVZfVHhfVGltZSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnhfTURSRFlfQ05UID0gJWxsdSAoUFBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9NRFJEWV0pO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBDQ0tfTURSRFkgPSAlbGx1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgT0ZETV9NRFJEWSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgT0ZETV9HUkVFTl9NRFJEWSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUHJpbSBDQ0EgVGltZSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0NDQV9USU1FXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFNlYyBDQ0EgVGltZSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9TX0NDQV9USU1FXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFByaW0gRUQgVGltZSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0VEX1RJTUVdKTtcbitcbitcdC8qID09PVR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYyk9PT0gKi9cbitcdHNlcV9wdXRzKHMsIFwiXFxuPT09IFR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYykgPT09XFxuXCIpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBCZWFjb25UeENudCA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CQ05fVFhdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgVHggNDBNSHogQ250ID0gJWxsdSAgKE1QRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfNDBNSFpdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgVHggODBNSHogQ250ID0gJWxsdSAgKE1QRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfODBNSFpdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgVHggMTYwTUh6IENudCA9ICVsbHUgIChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1RYX0JXXzE2ME1IWl0pO1xuK1xuK1x0LyogPT09QlNTSURbMF0gUmVsYXRlZCBDb3VudGVycz09PSAqL1xuK1x0c2VxX3B1dHMocywgXCJcXG49PT0gQlNTSURbMF0gUmVsYXRlZCBDb3VudGVycyA9PT1cXG5cIik7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIEJBIE1pc3MgQ250ID0gJWxsdSAgKFBQRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9CQV9NSVNTXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJUUyBUeCBDbnQgPSAlbGx1ICAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX1JUU19UWF9DTlRdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgRnJhbWUgUmV0cnkgQ250ID0gJWxsdSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIEZyYW1lIFJldHJ5IDIgQ250ID0gJWxsdSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzJdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUlRTIFJldHJ5IENudCA9ICVsbHUgKE1QRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9SVFNfUkVUUlldKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgQWNrIEZhaWxlZCBDbnQgPSAlbGx1IChQUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfQUNLX0ZBSUxdKTtcbitcbitcdC8qID09PUFNUERVIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi9cbitcdHNlcV9wdXRzKHMsIFwiXFxuPT09IEFNUERVIFJlbGF0ZWQgQ291bnRlcnMgPT09XFxuXCIpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBUeCBBTVBEVV9Qa3RfQ250ID0gJWxsdSAgKFBQRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgVHggQU1QRFVfTVBEVV9Qa3RfQ250ID0gJWxsdSAgKE1QRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV0pO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBBTVBEVSBUeCBzdWNjZXNzID0gJWxsdSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF0pO1xuK1xuK1x0dHhfdG90YWwgPSBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV07XG4rXHR0eF9mYWlsID0gIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVXSAtIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF07XG4rXHR0eF9wZXIgPSB0eF90b3RhbCA9PSAwID8gMCA6IGRpdjY0X3U2NCgxMDAwICogdHhfZmFpbCwgdHhfdG90YWwpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBBTVBEVSBUeCBmYWlsIGNvdW50ICAgPSAlbGx1ICAoTVBEVSksIFBFUj0lbGx1LiUxbGx1JSVcXG5cIixcbitcdFx0ICAgXCIgXCIsXG4rXHRcdCAgIHR4X2ZhaWwsXG4rXHRcdCAgIGRpdl91NjRfcmVtKHR4X3BlciwgMTAsIFx1MDAyNnR4X3Blcl9yZW0pLCAodTY0KXR4X3Blcl9yZW0pO1xuK1xuK291dDpcbitcdGtmcmVlKHN0YXRzKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGlyO1xuQEAgLTMxMyw1ICs2NTYsOCBAQCBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuIFx0XHRcdFx0ICAgIG10NzkyeF9wbV9zdGF0cyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiZGVlcC1zbGVlcFwiLCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19kcyk7XG4gXG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LVx1MDAzZW10NzYuZGV2LCBcInN0YXRzXCIsIGRpcixcbitcdFx0XHRcdCAgICBtdDc5Mnhfc3RhdHMpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWE0Nzk1MzA2MmJjM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuY1xuQEAgLTAsMCArMSw1ODUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4rLyogQ29weXJpZ2h0IChDKSAyMDI2IE1lZGlhVGVrIEluYy4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwibXQ3OTI1LmhcIlxuKyNpbmNsdWRlIFwibWN1LmhcIlxuKyNpbmNsdWRlIFwibWFjLmhcIlxuKyNpbmNsdWRlIFwic3RhdHMuaFwiXG4rXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1ZFUlNJT04gMVxuKyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19WQUxJRCAxVVxuK1xuKyNkZWZpbmUgTVQ3OTI1X01JQl9NQVhfQ05UXHRcdFx0MzJcbisjZGVmaW5lIE1UNzkyNV9NSUJfQ05UX01BWF9OVU1cdFx0NTEyICAvKiBmaXJtd2FyZSBVTklfQ01EX01JQl9DTlRfTUFYX05VTSB1cHBlciBib3VuZCAqL1xuK1xuKyNkZWZpbmUgTVQ3OTI1X0xRX0JBTkRfTlVNXHQ0XHRcdFx0LyogTGluayBxdWFsaXR5IGJhbmQgKi9cbitcbitjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X21vZGVfc3RyW10gPSB7XG4rXHRcIkNDS1wiLCBcIk9GRE1cIiwgXCJNTVwiLCBcIkdGXCIsIFwiVkhUXCIsIFwiUExSXCIsXG4rXHRcIlBMUlBcIiwgXCJBTFJcIiwgXCJIRV9TVVwiLCBcIkhFX0VSXCIsIFwiSEVfVFJJR1wiLCBcIkhFX01VXCIsXG4rXHRcIkVIVF9FUlwiLCBcIlRPRlwiLCBcIkVIVF9UUklHXCIsIFwiRUhUX01VXCJcbit9O1xuK1xuK2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW10gPSB7XG4rXHRcIjFNXCIsIFwiMk1cIiwgXCI1LjVNXCIsIFwiMTFNXCIsIFwiTi9BXCJcbit9O1xuK1xuK2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbXSA9IHtcbitcdFwiQlcyMFwiLCBcIkJXNDBcIiwgXCJCVzgwXCIsIFwiQlcxNjAvQlc4MDgwXCIsIFwiQlczMjBcIiwgXCJOL0FcIlxuK307XG4rXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfcmVxIHtcbitcdHU4IHJzdls0XTtcbitcdF9fbGUxNiB0YWc7XG4rXHRfX2xlMTYgbGVuO1xuK1x0dTggc3RhX3JlY19pZHg7XG4rXHR1OCByc3YxO1xuK1x0dTggbGxzX3JlYWRfY2xlYXI7XG4rXHR1OCByZXNldF9jb3VudGVyO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQge1xuK1x0dTggcnN2WzRdO1xuK1x0X19sZTE2IHRhZztcbitcdF9fbGUxNiBsZW47XG4rXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyBzdGF0cztcbit9IF9fcGFja2VkO1xuK1xuKy8qIFdUQkwgYXV0by1yYXRlIHJlcXVlc3QgVExWLCBtaXJyb3IgR2VuNG0gc3RydWN0IFVOSV9DTURfU1RBVF9XVEJMLlxuKyAqIFRoZSBSQSB0YWcgcmV1c2VzIFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMICgxMCkuXG4rICovXG4rc3RydWN0IG10NzkyNV93dGJsX3JhdGVfcmVxIHtcbitcdHU4IHJzdls0XTtcbitcdF9fbGUxNiB0YWc7XG4rXHRfX2xlMTYgbGVuO1xuK1x0X19sZTE2IHdsYW5faWR4O1xuK1x0X19sZTE2IHJzdjE7XG4rfSBfX3BhY2tlZDtcbitcbisvKiBXVEJMIGF1dG8tcmF0ZSBldmVudCBUTFYuIEZpcm13YXJlIGFuc3dlcnMgY21kIHRhZyAxMCB3aXRoIGV2ZW50IHRhZyAxMi4gKi9cbitzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZV9ldmVudCB7XG4rXHR1OCByc3ZbNF07XG4rXHRzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSByYXRlO1xuK30gX19wYWNrZWQ7XG4rXG4rLyogZml4ZWQgZmllbGQsIG1pcnJvciBVTklfKENNRHxFVkVOVClfTUlCX0lORk8gKi9cbitzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIge1xuK1x0dTggYmFuZF9pZHg7XG4rXHR1OCByc3ZbM107XG4rfSBfX3BhY2tlZDtcbitcbisvKiBPbmUgcmVxdWVzdGVkL3JldHVybmVkIE1JQiBjb3VudGVyLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBX1QuICovXG4rc3RydWN0IG10NzkyNV9taWJfZGF0YSB7XG4rXHRfX2xlMTYgdGFnO1x0LyogVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBID0gMCAqL1xuK1x0X19sZTE2IGxlbjtcbitcdF9fbGUzMiBjb3VudGVyO1x0LyogTUlCIGNvdW50ZXIgSUQgKGVudW0gbXQ3OTI1X21pYl9jb3VudGVyKSAqL1xuK1x0X19sZTY0IGRhdGE7XHQvKiBvbmx5IHZhbGlkIG9uIGV2ZW50OyBpZ25vcmVkIG9uIGNtZCAqL1xuK30gX19wYWNrZWQ7XG4rXG4rLyogcGVyLWJhbmQgbGluayBxdWFsaXR5IGVudHJ5LCBtaXJyb3IgVU5JX0xJTktfUVVBTElUWSAqL1xuK3N0cnVjdCBtdDc5MjVfbGlua19xdWFsaXR5IHtcbitcdHM4IHJzc2k7XHRcdC8qIG1vdmluZy1hdmVyYWdlIGJlYWNvbiBSU1NJIG9mIGNvbm5lY3RlZCBBUCAqL1xuK1x0czggbGlua19xdWFsaXR5O1x0LyogYWx3YXlzIDAgKi9cbitcdF9fbGUxNiBsaW5rX3NwZWVkO1x0LyogVFggcmF0ZTEsIHVuaXQgNTAwIEtiL3MgKi9cbitcdHU4IG1lZGl1bV9idXN5X3BjdDtcdC8qIGFsd2F5cyAwICovXG4rXHR1OCBpc19yZWFkeTtcdFx0LyogMDogZmllbGRzIGludmFsaWQsIDE6IHZhbGlkICovXG4rXHR1OCByc3ZbMl07XG4rfSBfX3BhY2tlZDtcbitcbisvKiByZXF1ZXN0IFRMViwgbWlycm9yIFVOSV9DTURfTElOS19RVUFMSVRZIChoZWFkZXIgKyB0YWcvbGVuIG9ubHkpICovXG4rc3RydWN0IG10NzkyNV9scV9yZXEge1xuK1x0dTggcnN2WzRdO1x0XHQvKiBVTklfQ01EX0dFVF9TVEFUSVNUSUNTIGZpeGVkIGZpZWxkICovXG4rXHRfX2xlMTYgdGFnO1x0XHQvKiBVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19MSU5LX1FVQUxJVFkgPSAxICovXG4rXHRfX2xlMTYgbGVuO1xuK30gX19wYWNrZWQ7XG4rXG4rLyogZXZlbnQgVExWLCBtaXJyb3IgVU5JX0VWRU5UX0xJTktfUVVBTElUWSAqL1xuK3N0cnVjdCBtdDc5MjVfbHFfZXZlbnQge1xuK1x0dTggcnN2WzRdO1x0XHQvKiBVTklfRVZFTlRfU1RBVElTVElDUyBmaXhlZCBmaWVsZCAqL1xuK1x0X19sZTE2IHRhZztcdFx0LyogVU5JX0VWRU5UX0lEX1NUQVRJU1RJQ1NfTElOS19RVUFMSVRZID0gMSAqL1xuK1x0X19sZTE2IGxlbjtcbitcdHN0cnVjdCBtdDc5MjVfbGlua19xdWFsaXR5IGxxW01UNzkyNV9MUV9CQU5EX05VTV07XG4rfSBfX3BhY2tlZDtcbitcbitzdGF0aWMgdm9pZFxuK210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHhfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuK3tcbitcdHN0cnVjdCBtdDc5MjVfc3RhX3JlY19sb29rdXAgKmxvb2t1cCA9IGRhdGE7XG4rXHRzdHJ1Y3QgbXQ3OTJ4X3ZpZiAqbXZpZjtcbitcdHN0cnVjdCBtdDc5Mnhfc3RhICptc3RhO1xuK1xuK1x0aWYgKGxvb2t1cC1cdTAwM2VzdGFfcmVjX2lkeCBcdTAwM2U9IDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8ICF2aWYtXHUwMDNlY2ZnLmFzc29jKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtdmlmID0gKHN0cnVjdCBtdDc5MnhfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuK1x0bXN0YSA9IG12aWYtXHUwMDNld2VwX3N0YTtcbitcdGlmICghbXN0YSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFtc3RhLVx1MDAzZWRlZmxpbmsud2NpZC5zdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGxvb2t1cC1cdTAwM2VzdGFfcmVjX2lkeCA9IG1zdGEtXHUwMDNlZGVmbGluay53Y2lkLmlkeDtcbit9XG4rXG4raW50XG4rbXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqc3RhX3JlY19pZHgpXG4re1xuK1x0c3RydWN0IG10NzkyNV9zdGFfcmVjX2xvb2t1cCBsb29rdXAgPSB7XG4rXHRcdC5zdGFfcmVjX2lkeCA9IC0xLFxuK1x0fTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2LVx1MDAzZW10NzYubXV0ZXgpO1xuK1xuK1x0aWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMoZGV2LVx1MDAzZW1waHkuaHcsXG4rXHRcdFx0XHRcdCAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9SRVNVTUVfQUxMLFxuK1x0XHRcdFx0XHQgICAgbXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeF9pdGVyLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2bG9va3VwKTtcbitcbitcdGlmIChsb29rdXAuc3RhX3JlY19pZHggXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRU5PVENPTk47XG4rXG4rXHRpZiAobG9va3VwLnN0YV9yZWNfaWR4IFx1MDAzZSBVOF9NQVgpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0KnN0YV9yZWNfaWR4ID0gbG9va3VwLnN0YV9yZWNfaWR4O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIERlY29kZSB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCBhbmQgcHJpbnQgdGhlIGxhc3QgVFggcmF0ZSAqL1xuK3ZvaWRcbittdDc5MjVfcHJpbnRfbGFzdF90eF9yYXRlKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3QgX19sZTMyIGxlX3R4dlszXSlcbit7XG4rXHRjb25zdCBjaGFyICptb2RlX3N0ciA9IFwiTi9BXCI7XG4rXHR1OCByYXRlLCB0eG1vZGUsIGZybW9kZSwgc2dpLCBsZHBjLCBuc3RzLCBzdGJjLCBzcGUsIGRjbSwgZXJzdTEwNnQ7XG4rXHRzOCB0eHB3ciwgcG9zX3R4cHdyO1xuK1x0dTMyIHR4dlszXTtcbitcbitcdHR4dlswXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlswXSk7XG4rXHR0eHZbMV0gPSBsZTMyX3RvX2NwdShsZV90eHZbMV0pO1xuK1x0dHh2WzJdID0gbGUzMl90b19jcHUobGVfdHh2WzJdKTtcbitcbitcdGlmICh0eHZbMF0gPT0gMHhmZmZmZmZmZikge1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgICVzID0gJXNcXG5cIiwgXCIgXCIsIFwiTGFzdCBUWCBSYXRlXCIsIFwiTi9BXCIpO1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgICVzID0gJXNcXG5cIixcbitcdFx0XHQgICBcIiBcIiwgXCJDaGlwIE91dCBUWCBQb3dlclwiLCBcIk4vQVwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmF0ZSA9IE1UNzkyNV9UWFZfR0VUX1RYX1JBVEUodHh2KTtcbitcdHR4bW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX01PREUodHh2KTtcbitcdGZybW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX0ZSTU9ERSh0eHYpO1xuK1x0bnN0cyA9IE1UNzkyNV9UWFZfR0VUX1RYX05TVFModHh2KSArIDE7XG4rXHRzZ2kgPSBNVDc5MjVfVFhWX0dFVF9UWF9TR0kodHh2KTtcbitcdGxkcGMgPSBNVDc5MjVfVFhWX0dFVF9UWF9MRFBDKHR4dik7XG4rXHRzdGJjID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyh0eHYpO1xuK1x0dHhwd3IgPSBNVDc5MjVfVFhWX0dFVF9UWF9QV1IodHh2KTtcbitcdHNwZSA9IE1UNzkyNV9UWFZfR0VUX1RYX1NQRV9JRFgodHh2KTtcbitcdGRjbSA9IE1UNzkyNV9UWFZfR0VUX1RYX0RDTSh0eHYpO1xuK1x0ZXJzdTEwNnQgPSBNVDc5MjVfVFhWX0dFVF9UWF8xMDZUKHR4dik7XG4rXG4rXHRpZiAoZGNtKVxuK1x0XHRyYXRlID0gTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XG4rXHRpZiAoZXJzdTEwNnQpXG4rXHRcdHJhdGUgPSBNVDc5MjVfVFhWX1JBVEVfVU5NQVNLXzEwNlQocmF0ZSk7XG4rXG4rXHRpZiAodHhtb2RlIFx1MDAzYyBBUlJBWV9TSVpFKG10NzkyNV90eF9tb2RlX3N0cikpXG4rXHRcdG1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07XG4rXG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgICVzID0gXCIsIFwiIFwiLCBcIkxhc3QgVFggUmF0ZVwiKTtcbitcbitcdC8qIHJhdGUvTUNTIGZpZWxkICovXG4rXHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLFxuK1x0XHRcdCAgIHJhdGUgXHUwMDNjIDQgPyBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGVdIDpcbitcdFx0XHQgICAoKChyYXRlIFx1MDAzZT0gNSkgXHUwMDI2XHUwMDI2IChyYXRlIFx1MDAzYz0gNykpID9cbitcdFx0XHQgICAgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltyYXRlIC0gNF0gOlxuK1x0XHRcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyWzRdKSk7XG4rXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLCBtdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cihyYXRlKSk7XG4rXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCB8fFxuK1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRilcbitcdFx0c2VxX3ByaW50ZihzLCBcIk1DUyVkLCBcIiwgcmF0ZSk7XG4rXHRlbHNlXG4rXHRcdHNlcV9wcmludGYocywgXCIlcyVkX01DUyVkLCBcIixcbitcdFx0XHQgICBzdGJjID8gXCJOU1RTXCIgOiBcIk5TU1wiLCBuc3RzLCByYXRlKTtcbitcbitcdC8qIGJhbmR3aWR0aCAqL1xuK1x0c2VxX3ByaW50ZihzLCBcIiVzLCBcIixcbitcdFx0ICAgZnJtb2RlIFx1MDAzYyA1ID8gbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZybW9kZV0gOlxuK1x0XHQgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbNV0pO1xuK1xuK1x0LyogR0kgLyBwcmVhbWJsZSAqL1xuK1x0aWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSylcbitcdFx0c2VxX3ByaW50ZihzLCBcIiVzLCBcIiwgcmF0ZSBcdTAwM2MgNCA/IFwiTFBcIiA6IFwiU1BcIik7XG4rXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuK1x0XHQ7IC8qIE9GRE0gaGFzIG5vIEdJL3ByZWFtYmxlIHRvIHByaW50ICovXG4rXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCB8fFxuK1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiB8fFxuK1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfVkhUIHx8XG4rXHRcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIpXG4rXHRcdHNlcV9wcmludGYocywgXCIlcywgXCIsIHNnaSA9PSAwID8gXCJMR0lcIiA6IFwiU0dJXCIpO1xuK1x0ZWxzZVxuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLFxuK1x0XHRcdCAgIHNnaSA9PSAwID8gXCJTR0lcIiA6IChzZ2kgPT0gMSA/IFwiTUdJXCIgOiBcIkxHSVwiKSk7XG4rXG4rXHQvKiBtb2RlLCBEQ00sIDEwNnQsIFNUQkMsIGNvZGluZywgU1BFICovXG4rXHRzZXFfcHJpbnRmKHMsIFwiJXMlcyVzJXMlcyVzJWRcXG5cIixcbitcdFx0ICAgbW9kZV9zdHIsXG4rXHRcdCAgIGRjbSA/IFwiLCBEQ01cIiA6IFwiXCIsIGVyc3UxMDZ0ID8gXCIsIDEwNnRcIiA6IFwiXCIsXG4rXHRcdCAgIHN0YmMgPyBcIiwgU1RCQywgXCIgOiBcIiwgXCIsIGxkcGMgPT0gMCA/IFwiQkNDXCIgOiBcIkxEUENcIixcbitcdFx0ICAgXCIsIFNQRVwiLCBzcGUpO1xuK1xuK1x0LyogY2hpcCBvdXQgVFggcG93ZXIgKHVuaXQ6IDAuNSBkQm0pICovXG4rXHRwb3NfdHhwd3IgPSAodHhwd3IgXHUwMDNjIDApID8gKH50eHB3ciArIDEpIDogdHhwd3I7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgICVzID0gJWMlZC4lMWQgZEJtXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBcIkNoaXAgT3V0IFRYIFBvd2VyXCIsXG4rXHRcdCAgICh0eHB3ciBcdTAwM2MgMCkgPyAnLScgOiAnKycsXG4rXHRcdCAgIChwb3NfdHhwd3IgLyAyKSwgNSAqIChwb3NfdHhwd3IgJSAyKSk7XG4rfVxuK1xuKy8qIEd1YXJkIGludGVydmFsIHVzZWQgZm9yIHRoZSBhdXRvLXJhdGUgZW50cmllcywgbWlycm9yIEdlbjRtXG4rICogY29ubmFjM3hfZ2V0X3NnaV9pbmZvX2Zyb21fZncoKTogcGljayB0aGUgcGVyLW1vZGUvcGVyLUJXIGZsYWcuXG4rICovXG4rdThcbittdDc5MjVfd3RibF9nZXRfc2dpKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlLCB1OCBmY2FwKVxuK3tcbitcdGJvb2wgaGUgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfU1UgfHxcbitcdFx0ICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgfHxcbitcdFx0ICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfVFJJRyB8fFxuK1x0XHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9NVSk7XG4rXHRib29sIGVodCA9ICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfRVIgfHxcbitcdFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9UUklHIHx8XG4rXHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUpO1xuK1xuK1x0aWYgKGVodClcbitcdFx0cmV0dXJuIHdyLVx1MDAzZWdpX2VodDtcbitcbitcdHN3aXRjaCAoZmNhcCkge1xuK1x0Y2FzZSBNVDc5MjVfQldfMjA6XG4rXHRcdHJldHVybiBoZSA/IHdyLVx1MDAzZWcyX2hlIDogd3ItXHUwMDNlZzI7XG4rXHRjYXNlIE1UNzkyNV9CV180MDpcbitcdFx0cmV0dXJuIGhlID8gd3ItXHUwMDNlZzRfaGUgOiB3ci1cdTAwM2VnNDtcbitcdGNhc2UgTVQ3OTI1X0JXXzgwOlxuK1x0XHRyZXR1cm4gaGUgPyB3ci1cdTAwM2VnOF9oZSA6IHdyLVx1MDAzZWc4O1xuK1x0Y2FzZSBNVDc5MjVfQldfMTYwOlxuK1x0XHRyZXR1cm4gaGUgPyB3ci1cdTAwM2VnMTZfaGUgOiB3ci1cdTAwM2VnMTY7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbit9XG4rXG4rLyogQ29kaW5nIHVzZWQgZm9yIHRoZSBhdXRvLXJhdGUgZW50cmllcywgbWlycm9yIEdlbjRtXG4rICogY29ubmFjM3hfd3RibF9nZXRfbGRwY19pbmZvX2Zyb21fZncoKTogMCA9IEJDQywgMSA9IExEUEMuXG4rICovXG4rdThcbittdDc5MjVfd3RibF9nZXRfbGRwYyhjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSlcbit7XG4rXHRzd2l0Y2ggKHR4bW9kZSkge1xuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYOlxuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0Y6XG4rXHRcdHJldHVybiB3ci1cdTAwM2VodF9sZHBjO1xuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVDpcbitcdFx0cmV0dXJuIHdyLVx1MDAzZXZodF9sZHBjO1xuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVOlxuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX0VSOlxuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1RSSUc6XG4rXHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfTVU6XG4rXHRcdHJldHVybiB3ci1cdTAwM2VoZV9sZHBjO1xuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUjpcbitcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfVFJJRzpcbitcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVU6XG4rXHRcdHJldHVybiB3ci1cdTAwM2VlaHRfbGRwYztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxuK1x0XHRcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cylcbit7XG4rXHR1MTYgbGVuID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKmV2ZW50ID0gTlVMTDtcbitcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfcmVxIHJlcSA9IHtcbitcdFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19TVEEpLFxuK1x0XHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxuK1x0XHQubGxzX3JlYWRfY2xlYXIgPSBmYWxzZSxcbitcdFx0LnJlc2V0X2NvdW50ZXIgPSBmYWxzZSxcbitcdH07XG4rXG4rXHRyZXQgPSBtdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4KGRldiwgXHUwMDI2cmVxLnN0YV9yZWNfaWR4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIXN0YXRzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG4rXHRcdFx0XHRcdE1DVV9VTklfUVVFUlkoR0VUX1NUQVRfSU5GTyksXG4rXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZXZlbnQgPSAoc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKilza2ItXHUwMDNlZGF0YTtcbitcbitcdGlmIChsZTE2X3RvX2NwdShldmVudC1cdTAwM2V0YWcpICE9IFVOSV9DTURfSURfU1RBVElTVElDU19TVEEpIHtcbitcdFx0cmV0ID0gLUVQUk9UTztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRsZW4gPSBsZTE2X3RvX2NwdShldmVudC1cdTAwM2VsZW4pO1xuK1x0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKCpldmVudCkgLSBzaXplb2YoZXZlbnQtXHUwMDNlcnN2KSB8fFxuK1x0ICAgIGxlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIHNpemVvZihldmVudC1cdTAwM2Vyc3YpIHx8ICFJU19BTElHTkVEKGxlbiwgNCkpIHtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChldmVudC1cdTAwM2VzdGF0cy52ZXJzaW9uICE9IE1UNzkyNV9TVEFfU1RBVFNfVkVSU0lPTikge1xuK1x0XHRyZXQgPSAtRVBST1RPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICghKGxlMzJfdG9fY3B1KGV2ZW50LVx1MDAzZXN0YXRzLmZsYWdzKSBcdTAwMjYgTVQ3OTI1X1NUQV9TVEFUU19WQUxJRCkpIHtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRtZW1jcHkoc3RhdHMsIFx1MDAyNmV2ZW50LVx1MDAzZXN0YXRzLCBzaXplb2YoKnN0YXRzKSk7XG4rXG4rb3V0OlxuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGJhbmRfaWR4LFxuK1x0XHRcdCAgICBjb25zdCB1MzIgKmNvdW50ZXJzLCB1OCBjb3VudGVyX251bSxcbitcdFx0XHQgICAgdTY0ICp2YWx1ZXMpXG4re1xuK1x0dTggKnJlcTtcbitcdHU4ICp0bHYsICp0bHZfZW5kO1xuK1x0dTE2IHJlcV9sZW47XG4rXHRpbnQgaSwgcmV0O1xuK1x0c3RydWN0IG10NzkyNV9taWJfaGRyICpyZXFfaGRyO1xuK1x0c3RydWN0IG10NzkyNV9taWJfZGF0YSAqcmVxX3RsdjtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRpZiAoIWNvdW50ZXJzIHx8ICF2YWx1ZXMgfHwgIWNvdW50ZXJfbnVtIHx8XG4rXHQgICAgY291bnRlcl9udW0gXHUwMDNlIE1UNzkyNV9NSUJfTUFYX0NOVClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBjbGVhciBvdXRwdXQ7IGNvdW50ZXJzIG5vdCByZXR1cm5lZCBieSBmaXJtd2FyZSBzdGF5IDAgKi9cbitcdG1lbXNldCh2YWx1ZXMsIDAsIGNvdW50ZXJfbnVtICogc2l6ZW9mKCp2YWx1ZXMpKTtcbitcbitcdHJlcV9sZW4gPSBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSArXG4rXHRcdCAgY291bnRlcl9udW0gKiBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSk7XG4rXG4rXHRyZXEgPSBremFsbG9jKHJlcV9sZW4sIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyZXEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmVxX2hkciA9IChzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIgKilyZXE7XG4rXHRyZXFfaGRyLVx1MDAzZWJhbmRfaWR4ID0gYmFuZF9pZHg7XG4rXG4rXHRyZXFfdGx2ID0gKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKikocmVxICsgc2l6ZW9mKCpyZXFfaGRyKSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudGVyX251bTsgaSsrKSB7XG4rXHRcdHJlcV90bHZbaV0udGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9NSUJfREFUQSk7XG4rXHRcdHJlcV90bHZbaV0ubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpKTtcbitcdFx0cmVxX3RsdltpXS5jb3VudGVyID0gY3B1X3RvX2xlMzIoY291bnRlcnNbaV0pO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbitcdFx0XHRcdFx0TUNVX1VOSV9RVUVSWShHRVRfTUlCX0lORk8pLCByZXEsXG4rXHRcdFx0XHRcdHJlcV9sZW4sIHRydWUsIFx1MDAyNnNrYik7XG4rXHRrZnJlZShyZXEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSkge1xuK1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0Lyogd2FsayB0aGUgcmV0dXJuZWQgVExWcywgbWF0Y2ggZWFjaCBjb3VudGVyIElEIHRvIHRoZSByZXF1ZXN0ICovXG4rXHR0bHYgPSBza2ItXHUwMDNlZGF0YSArIHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIpO1xuK1x0dGx2X2VuZCA9IHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWxlbjtcbitcbitcdHdoaWxlICh0bHYgKyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSkgXHUwMDNjPSB0bHZfZW5kKSB7XG4rXHRcdHN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKmV2dF90bHYgPVxuK1x0XHRcdChzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICopdGx2O1xuK1x0XHR1MTYgdGFnID0gbGUxNl90b19jcHUoZXZ0X3Rsdi1cdTAwM2V0YWcpO1xuK1x0XHR1MTYgbGVuID0gbGUxNl90b19jcHUoZXZ0X3Rsdi1cdTAwM2VsZW4pO1xuK1x0XHR1MzIgY291bnRlcjtcbitcbitcdFx0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpIHx8XG4rXHRcdCAgICB0bHYgKyBsZW4gXHUwMDNlIHRsdl9lbmQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmICh0YWcgPT0gVU5JX0NNRF9NSUJfREFUQSkge1xuK1x0XHRcdGNvdW50ZXIgPSBsZTMyX3RvX2NwdShldnRfdGx2LVx1MDAzZWNvdW50ZXIpO1xuK1xuK1x0XHRcdGlmIChjb3VudGVyIFx1MDAzYyBNVDc5MjVfTUlCX0NOVF9NQVhfTlVNKSB7XG4rXHRcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudGVyX251bTsgaSsrKSB7XG4rXHRcdFx0XHRcdGlmIChjb3VudGVyc1tpXSA9PSBjb3VudGVyKSB7XG4rXHRcdFx0XHRcdFx0dmFsdWVzW2ldID1cbitcdFx0XHRcdFx0XHQgIGxlNjRfdG9fY3B1KGV2dF90bHYtXHUwMDNlZGF0YSk7XG4rXHRcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHRcdH1cbitcdFx0XHRcdH1cbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0dGx2ICs9IGxlbjtcbitcdH1cbitcbitcdHJldCA9IDA7XG4rXG4rb3V0OlxuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rY2hhciAqbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIodTggb2ZkbV9pZHgpXG4re1xuK1x0Y2hhciAqIGNvbnN0IG9mZG1fc3RyW10gPSB7XG4rXHRcdFwiNk1cIiwgXCI5TVwiLCBcIjEyTVwiLCBcIjE4TVwiLCBcIjI0TVwiLCBcIjM2TVwiLCBcIjQ4TVwiLCBcIjU0TVwiLCBcIk4vQVwiXG4rXHR9O1xuK1xuK1x0c3dpdGNoIChvZmRtX2lkeCkge1xuK1x0Y2FzZSAxMTogcmV0dXJuIG9mZG1fc3RyWzBdO1x0LyogNk0gKi9cbitcdGNhc2UgMTU6IHJldHVybiBvZmRtX3N0clsxXTtcdC8qIDlNICovXG4rXHRjYXNlIDEwOiByZXR1cm4gb2ZkbV9zdHJbMl07XHQvKiAxMk0gKi9cbitcdGNhc2UgMTQ6IHJldHVybiBvZmRtX3N0clszXTtcdC8qIDE4TSAqL1xuK1x0Y2FzZSA5OiAgcmV0dXJuIG9mZG1fc3RyWzRdO1x0LyogMjRNICovXG4rXHRjYXNlIDEzOiByZXR1cm4gb2ZkbV9zdHJbNV07XHQvKiAzNk0gKi9cbitcdGNhc2UgODogIHJldHVybiBvZmRtX3N0cls2XTtcdC8qIDQ4TSAqL1xuK1x0Y2FzZSAxMjogcmV0dXJuIG9mZG1fc3RyWzddO1x0LyogNTRNICovXG4rXHRkZWZhdWx0OiByZXR1cm4gb2ZkbV9zdHJbOF07XG4rXHR9XG4rfVxuK1xuKy8qIG10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZSAtIGZldGNoIHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgZm9yIGEgV0NJRFxuKyAqIEBkZXY6XHRkZXZpY2VcbisgKiBAd2xhbl9pZHg6XHRIVyBXVEJMIC8gV0NJRCBpbmRleCAoc2VlIG10NzkyNV9zdGFfc3RhdHMud3RibF9pZHgpXG4rICogQHJhdGU6XHRvdXQsIGZpbGxlZCB3aXRoIHRoZSBhdXRvLXJhdGUgdGFibGUgc25hcHNob3RcbisgKlxuKyAqIE1pcnJvciBvZiBHZW40bSB3bGFub2lkR2V0U3RhdFd0YmwoKTogc2VuZCBVTklfQ01EX0dFVF9TVEFUX0lORk8gd2l0aCB0aGVcbisgKiBXVEJMIHJhdGUgVExWIChjbWQgdGFnIDEwKSBhbmQgcGFyc2UgdGhlIHJlcGx5IChldmVudCB0YWcgMTIpIGludG8gQHJhdGUuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLlxuKyAqL1xuK2ludCBtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTE2IHdsYW5faWR4LFxuK1x0XHRcdCAgICAgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKnJhdGUpXG4re1xuK1x0aW50IHJldDtcbitcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICpldmVudCA9IE5VTEw7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX3JlcSByZXEgPSB7XG4rXHRcdC50YWcgPSBjcHVfdG9fbGUxNihVTklfQ01EX0lEX1NUQVRJU1RJQ1NfV1RCTCksXG4rXHRcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksXG4rXHRcdC53bGFuX2lkeCA9IGNwdV90b19sZTE2KHdsYW5faWR4KSxcbitcdH07XG4rXG4rXHRpZiAoIXJhdGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbitcdFx0XHRcdFx0TUNVX1VOSV9RVUVSWShHRVRfU1RBVF9JTkZPKSxcbitcdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpldmVudCkpIHtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICopc2tiLVx1MDAzZWRhdGE7XG4rXG4rXHRpZiAobGUxNl90b19jcHUoZXZlbnQtXHUwMDNlcmF0ZS50YWcpICE9IE1UNzkyNV9VTklfRVZFTlRfU1RBVElTVElDU19XVEJMKSB7XG4rXHRcdHJldCA9IC1FUFJPVE87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bWVtY3B5KHJhdGUsIFx1MDAyNmV2ZW50LVx1MDAzZXJhdGUsIHNpemVvZigqcmF0ZSkpO1xuK1x0cmV0ID0gMDtcbitcbitvdXQ6XG4rXHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkgLSBxdWVyeSBSU1NJIGFuZCBUWCBsaW5rIHNwZWVkIGZvciBhIGJhbmRcbisgKiBAZGV2Olx0ZGV2aWNlXG4rICogQGJhbmRfaWR4Olx0YmFuZC9CU1MgaW5kZXggKDAuLjMpXG4rICogQHJzc2k6XHRvdXQsIG1vdmluZy1hdmVyYWdlIGJlYWNvbiBSU1NJIGluIGRCbSAobWF5IGJlIE5VTEwpXG4rICogQHR4X2xpbmtfc3BlZWRfa2Jwczogb3V0LCBUWCByYXRlIGluIGtiaXQvcyAobWF5IGJlIE5VTEwpXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgYmFuZCdzIGxpbmsgcXVhbGl0eSBpcyBub3QgcmVhZHkuXG4rICpcbisgKiBPbmx5IFJTU0kgYW5kIFRYIHJhdGUgY29tZSBmcm9tIGZpcm13YXJlIGhlcmU7IGZvciBSWCByYXRlIHJlYWQgd2NpZC1cdTAwM2VyYXRlLlxuKyAqL1xuK2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4rXHRcdFx0XHRzOCAqcnNzaSwgdTMyICp0eF9saW5rX3NwZWVkX2ticHMpXG4re1xuK1x0aW50IHJldDtcbitcdHN0cnVjdCBtdDc5MjVfbHFfZXZlbnQgKmV2ZW50O1xuK1x0c3RydWN0IG10NzkyNV9saW5rX3F1YWxpdHkgKmxxO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHN0cnVjdCBtdDc5MjVfbHFfcmVxIHJlcSA9IHtcbitcdFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkpLFxuK1x0XHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxuK1x0fTtcbitcbitcdGlmIChiYW5kX2lkeCBcdTAwM2U9IE1UNzkyNV9MUV9CQU5EX05VTSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuK1x0XHRcdFx0XHRNQ1VfVU5JX1FVRVJZKEdFVF9TVEFUX0lORk8pLCBcdTAwMjZyZXEsXG4rXHRcdFx0XHRcdHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKmV2ZW50KSkge1xuK1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0ZXZlbnQgPSAoc3RydWN0IG10NzkyNV9scV9ldmVudCAqKXNrYi1cdTAwM2VkYXRhO1xuK1xuK1x0aWYgKGxlMTZfdG9fY3B1KGV2ZW50LVx1MDAzZXRhZykgIT0gVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSkge1xuK1x0XHRyZXQgPSAtRVBST1RPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGxxID0gXHUwMDI2ZXZlbnQtXHUwMDNlbHFbYmFuZF9pZHhdO1xuK1x0aWYgKCFscS1cdTAwM2Vpc19yZWFkeSkge1xuK1x0XHRyZXQgPSAtRU5PRU5UO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChyc3NpKVxuK1x0XHQqcnNzaSA9IGxxLVx1MDAzZXJzc2k7XG4rXG4rXHQvKiBmaXJtd2FyZSByZXBvcnRzIFRYIHJhdGUgaW4gNTAwIEtiL3MgdW5pdHMgLVx1MDAzZSBrYml0L3MgKi9cbitcdGlmICh0eF9saW5rX3NwZWVkX2ticHMpXG4rXHRcdCp0eF9saW5rX3NwZWVkX2ticHMgPSBsZTE2X3RvX2NwdShscS1cdTAwM2VsaW5rX3NwZWVkKSAqIDUwMDtcbitcbitcdHJldCA9IDA7XG4rXG4rb3V0OlxuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hNzBiOWViM2FhODA2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oXG5AQCAtMCwwICsxLDMwOSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi9cbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYgTWVkaWFUZWsgSW5jLiAqL1xuK1xuKyNpZm5kZWYgX19NVDc5MjVfU1RBVFNfSFxuKyNkZWZpbmUgX19NVDc5MjVfU1RBVFNfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXCIuLi9tdDc2X2Nvbm5hY19tY3UuaFwiXG4rXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0FDX05VTSA0XG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNIDJcbisjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfQUdHX1JBTkdFX05VTSAxNlxuKyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19UWF9RVUFMSVRZX05VTSA0XG4rI2RlZmluZSBNVDc5MjVfVFhfTU9ERV9OVU0gICAgICAxNlxuKyNkZWZpbmUgTVQ3OTI1X1RYX1JBVEVfQ0NLX05VTSAgNVxuKyNkZWZpbmUgTVQ3OTI1X1RYX1JBVEVfQldfTlVNICAgNlxuK1xuKy8qIEhXIHJhdGUgY29kZSAoMTYtYml0KSBmaWVsZCBleHRyYWN0LCBtaXJyb3IgR2VuNG0gQ09OTkFDM1hfSFdfVFhfUkFURV9UT18qLlxuKyAqIFRoZSBhdXRvLXJhdGUgdGFibGUgc3RvcmVzIG9uZSByYXRlIGNvZGUgcGVyIGVudHJ5LlxuKyAqL1xuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fTUNTKF94KVx0KCgoX3gpIFx1MDAyNiBHRU5NQVNLKDUsIDApKSBcdTAwM2VcdTAwM2UgMClcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX01PREUoX3gpXHQoKChfeCkgXHUwMDI2IEdFTk1BU0soOSwgNikpIFx1MDAzZVx1MDAzZSA2KVxuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fTlNTKF94KVx0KCgoX3gpIFx1MDAyNiBHRU5NQVNLKDEzLCAxMCkpIFx1MDAzZVx1MDAzZSAxMClcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX1NUQkMoX3gpXHQoKChfeCkgXHUwMDI2IEJJVCgxNCkpIFx1MDAzZVx1MDAzZSAxNClcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX0RDTShfeClcdCgoKF94KSBcdTAwMjYgQklUKDQpKSBcdTAwM2VcdTAwM2UgNClcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPXzEwNlQoX3gpXHQoKChfeCkgXHUwMDI2IEJJVCg1KSkgXHUwMDNlXHUwMDNlIDUpXG4rI2RlZmluZSBNVDc5MjVfSFdfUkFURV9VTk1BU0tfRENNKF9yKVx0KCh1OCkoX3IpIFx1MDAyNiAweGVmKVxuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVU5NQVNLXzEwNlQoX3IpXHQoKHU4KShfcikgXHUwMDI2IDB4ZGYpXG4rXG4rLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSAobWlycm9yIEdlbjRtXG4rICogQVVUT19SQVRFX05VTSkuIFJBIGN5Y2xlcyB0aHJvdWdoIHRoZXNlIGFuZCByZXBvcnRzIHdoaWNoIG9uZSBpcyBpbiB1c2VcbisgKiB2aWEgd3RibC1cdTAwM2VyYXRlX2lkeC5cbisgKi9cbisjZGVmaW5lIE1UNzkyNV9BVVRPX1JBVEVfTlVNIDhcbitcbisvKiBGaXJtd2FyZSBFVkVOVF9TVEFUSVNUSUNTIHN1Yi1ldmVudCB0YWdzLiBUaGUgV1RCTCByYXRlIHJlcXVlc3QgdXNlcyBjbWQgdGFnXG4rICogVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgKDEwKSBidXQgdGhlIGZpcm13YXJlIHJlcGxpZXMgd2l0aCBldmVudCB0YWcgMTIuXG4rICovXG4rI2RlZmluZSBNVDc5MjVfVU5JX0VWRU5UX1NUQVRJU1RJQ1NfV1RCTCAxMlxuK1xuKy8qIENPTk5BQzNYIFRYIFZlY3RvciBCQlAgbGF0Y2ggYml0IGZpZWxkcyAobWlycm9yIGNtbV9hc2ljX2Nvbm5hYzN4LmgpLlxuKyAqIFRoZXNlIG9wZXJhdGUgb24gdGhlIDMtRFdPUkQgdHhfdmVjdG9yW2JhbmRdLnR4dlszXSBhcnJheS5cbisgKi9cbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1JBVEUoX3R4dilcdCgoX3R4dilbMl0gXHUwMDI2IDB4N2YpXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9MRFBDKF90eHYpXHQoKChfdHh2KVsyXSBcdTAwMjYgKDB4MSBcdTAwM2NcdTAwM2MgNykpIFx1MDAzZVx1MDAzZSA3KVxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyhfdHh2KVx0KCgoX3R4dilbMF0gXHUwMDI2ICgweDMgXHUwMDNjXHUwMDNjIDYpKSBcdTAwM2VcdTAwM2UgNilcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0ZSTU9ERShfdHh2KVx0KCgoX3R4dilbMF0gXHUwMDI2ICgweDcgXHUwMDNjXHUwMDNjIDgpKSBcdTAwM2VcdTAwM2UgOClcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX01PREUoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHhmIFx1MDAzY1x1MDAzYyAxMikpIFx1MDAzZVx1MDAzZSAxMilcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX05TVFMoX3R4dilcdCgoKF90eHYpWzJdIFx1MDAyNiAoMHhmVSBcdTAwM2NcdTAwM2MgMjgpKSBcdTAwM2VcdTAwM2UgMjgpXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9QV1IoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHhmZiBcdTAwM2NcdTAwM2MgMTYpKSBcdTAwM2VcdTAwM2UgMTYpXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9TR0koX3R4dilcdCgoKF90eHYpWzFdIFx1MDAyNiAoMHgzIFx1MDAzY1x1MDAzYyAyNikpIFx1MDAzZVx1MDAzZSAyNilcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NQRV9JRFgoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHgxZiBcdTAwM2NcdTAwM2MgMCkpIFx1MDAzZVx1MDAzZSAwKVxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfRENNKF90eHYpXHQoKChfdHh2KVsyXSBcdTAwMjYgKDB4MSBcdTAwM2NcdTAwM2MgNCkpIFx1MDAzZVx1MDAzZSA0KVxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfMTA2VChfdHh2KVx0KCgoX3R4dilbMl0gXHUwMDI2ICgweDEgXHUwMDNjXHUwMDNjIDUpKSBcdTAwM2VcdTAwM2UgNSlcbisjZGVmaW5lIE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfRENNKF9yKVx0KCh1OCkoX3IpIFx1MDAyNiAweGVmKVxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS18xMDZUKF9yKVx0KCh1OCkoX3IpIFx1MDAyNiAweGRmKVxuK1xuK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X21vZGVfc3RyW01UNzkyNV9UWF9NT0RFX05VTV07XG4rZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW01UNzkyNV9UWF9SQVRFX0NDS19OVU1dO1xuK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW01UNzkyNV9UWF9SQVRFX0JXX05VTV07XG4rXG4rLyogVFggcmF0ZSBtb2RlLCBtaXJyb3IgR2VuNG0gVFhfUkFURV9NT0RFXyogKHNlZSBuaWNfcmF0ZS5oKS4gVXNlZCB0byBkZWNvZGVcbisgKiBib3RoIHRoZSBUWCBWZWN0b3IgQkJQIGxhdGNoIGFuZCB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIHJhdGUgY29kZXMuXG4rICovXG4rZW51bSBtdDc5MjVfdHhfcmF0ZV9tb2RlIHtcbitcdE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLID0gMCxcbitcdE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSA9IDEsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYID0gMixcbitcdE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiA9IDMsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCA9IDQsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX1BMUiA9IDUsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVID0gOCxcbitcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgPSA5LFxuK1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHID0gMTAsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VID0gMTEsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUiA9IDEzLFxuK1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfVFJJRyA9IDE0LFxuK1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUgPSAxNSxcbit9O1xuK1xuK2VudW0ge1xuK1x0VU5JX0NNRF9NSUJfREFUQSxcbit9O1xuK1xuK2VudW0gc3RhdHNfcXVlcnlfbWliX2FycmF5X2luZGV4IHtcbitcdFFVRVJZX01JQl9DTlRfUlhfRkNTX0VSUiA9IDAsXG4rXHRRVUVSWV9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1csXG4rXHRRVUVSWV9NSUJfQ05UX1JYX01QRFUsXG4rXHRRVUVSWV9NSUJfQ05UX0FNUERVX1JYX0NPVU5ULFxuK1x0UVVFUllfTUlCX0NOVF9QRl9EUk9QLFxuK1x0UVVFUllfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXG4rXHRRVUVSWV9NSUJfQ05UX0NIQU5ORUxfSURMRSxcbitcdFFVRVJZX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FLFxuK1x0UVVFUllfTUlCX0NOVF9NRFJEWSxcbitcdFFVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUUsXG4rXHRRVUVSWV9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRSxcbitcdFFVRVJZX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxuK1x0UVVFUllfTUlCX0NOVF9QX0NDQV9USU1FLFxuK1x0UVVFUllfTUlCX0NOVF9TX0NDQV9USU1FLFxuK1x0UVVFUllfTUlCX0NOVF9QX0VEX1RJTUUsXG4rXHRRVUVSWV9NSUJfQ05UX0JDTl9UWCxcbitcdFFVRVJZX01JQl9DTlRfVFhfQldfNDBNSFosXG4rXHRRVUVSWV9NSUJfQ05UX1RYX0JXXzgwTUhaLFxuK1x0UVVFUllfTUlCX0NOVF9UWF9CV18xNjBNSFosXG4rXHRRVUVSWV9NSUJfQ05UX0JTUzBfQkFfTUlTUyxcbitcdFFVRVJZX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxuK1x0UVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZLFxuK1x0UVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIsXG4rXHRRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxuK1x0UVVFUllfTUlCX0NOVF9CU1MwX0FDS19GQUlMLFxuK1x0UVVFUllfTUlCX0NOVF9BTVBEVSxcbitcdFFVRVJZX01JQl9DTlRfQU1QRFVfTVBEVSxcbitcdFFVRVJZX01JQl9DTlRfQU1QRFVfQUNLRUQsXG4rXHRRVUVSWV9NSUJfQ05UX01BWF9OVU0sXG4rfTtcbitcbitlbnVtIHN0YXRzX3RyeF9hZ2dfcmFuZ2Uge1xuK1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UwX0lEWCxcbitcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFMV9JRFgsXG4rXHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTJfSURYLFxuK1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UzX0lEWCxcbitcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFNF9JRFgsXG4rXHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTVfSURYLFxuK1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U2X0lEWCxcbitcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFN19JRFgsXG4rXHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRV9NQVhfTlVNXG4rfTtcbitcbitlbnVtIHtcbitcdE1UNzkyNV9CV18yMCA9IDAsXG4rXHRNVDc5MjVfQldfNDAsXG4rXHRNVDc5MjVfQldfODAsXG4rXHRNVDc5MjVfQldfMTYwLFxuK307XG4rXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfYWMge1xuK1x0X19sZTMyIHR4X2ZhaWw7XG4rXHRfX2xlMzIgdHhfcmV0cnk7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c190eF92ZWN0b3Ige1xuK1x0X19sZTMyIHR4dlszXTtcbit9IF9fcGFja2VkO1xuK1xuK3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX21pYiB7XG4rXHRfX2xlMzIgcnhfbXBkdV9jbnQ7XG4rXHRfX2xlMzIgZmNzX2Vycm9yO1xuK1x0X19sZTMyIHJ4X2ZpZm9fZnVsbDtcbitcdF9fbGUzMiBhbXBkdV90eF9zZl9jbnQ7XG4rXHRfX2xlMzIgYW1wZHVfdHhfYWNrX3NmX2NudDtcbitcdF9fbGUzMiB0eF9yYW5nZV9hbXBkdV9jbnRbTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNXTtcbit9IF9fcGFja2VkO1xuK1xuKy8qIEZpcm13YXJlIEVWRU5UX1NUQV9TVEFUSVNUSUNTIGJvZHkuICovXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHMge1xuK1x0dTggdmVyc2lvbjtcbitcdHU4IHJzdlszXTtcbitcdF9fbGUzMiBmbGFncztcbitcbitcdHU4IHN0YV9pZHg7XG4rXHR1OCBic3NfaWR4O1xuK1x0dTggd3RibF9pZHg7XG4rXHR1OCByc3YxO1xuK1xuK1x0dTggbWFjX2FkZHJbRVRIX0FMRU5dO1xuK1x0dTggcGVyO1xuK1x0dTggcmNwaTtcbitcbitcdF9fbGUzMiBwaHlfbW9kZTtcbitcdF9fbGUxNiBsaW5rX3NwZWVkOyAvKiAwLjUgTWJpdC9zIHVuaXRzICovXG4rXHR1OCBsaW5rX3F1YWxpdHk7XG4rXHR1OCBsaW5rX3Jlc2VydmVkO1xuK1xuK1x0X19sZTMyIHR4X2NvdW50O1xuK1x0X19sZTMyIHR4X2ZhaWxfY291bnQ7XG4rXHRfX2xlMzIgdHhfbGlmZV90aW1lb3V0X2NvdW50O1xuK1x0X19sZTMyIHR4X2RvbmVfYWlyX3RpbWU7XG4rXHRfX2xlMzIgdHJhbnNtaXRfY291bnQ7XG4rXHRfX2xlMzIgdHJhbnNtaXRfZmFpbF9jb3VudDtcbitcbitcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2FjIGFjW01UNzkyNV9TVEFfU1RBVFNfQUNfTlVNXTtcbitcbitcdHU4IHRlbXBlcmF0dXJlO1xuK1x0dTggc2tpcF9hcjtcbitcdHU4IGFyX3RhYmxlX2lkeDtcbitcdHU4IHJhdGVfZW50cnlfaWR4O1xuK1x0dTggcmF0ZV9lbnRyeV9pZHhfcHJldjtcbitcdHU4IHR4X3NnaV9kZXRlY3RfcGFzc19jbnQ7XG4rXHR1OCBhdmVfcGVyO1xuK1x0dTggcnN2MjtcbitcbitcdF9fbGUzMiBhZ2dfcmFuZ2VfY3RybFsyXTtcbitcdHU4IHJhbmdlX21vZGU7XG4rXHR1OCByc3YzWzNdO1xuK1x0X19sZTMyIGFnZ19yYW5nZV9jdHJsX2V4dFs2XTtcbitcbitcdHU4IGFyX3N0YXRlX2N1cnI7XG4rXHR1OCBhcl9zdGF0ZV9wcmV2O1xuK1x0dTggYXJfYWN0aW9uX3R5cGU7XG4rXHR1OCBoaWdoZXN0X3JhdGVfY250O1xuK1x0dTggbG93ZXN0X3JhdGVfY250O1xuK1x0dTggcnN2NDtcbitcdF9fbGUxNiB0cmFpbl91cDtcbitcdF9fbGUxNiB0cmFpbl9kb3duO1xuK1x0dTggcnN2NVsyXTtcbitcdF9fbGUzMiByYXRlMV90eF9jbnQ7XG4rXHRfX2xlMzIgcmF0ZTFfZmFpbF9jbnQ7XG4rXG4rXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c190eF92ZWN0b3IgdHhfdmVjdG9yW01UNzkyNV9TVEFfU1RBVFNfQkFORF9OVU1dO1xuK1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfbWliIG1pYltNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNXTtcbitcbitcdHU4IGlzX2ZvcmNlX3R4X3N0cmVhbTtcbitcdHU4IGlzX2ZvcmNlX3NlX29mZjtcbitcdF9fbGUxNiByYV9ydW5uaW5nX2NudDtcbitcdHU4IHJhX3N0YXR1cztcbitcdHU4IG1heF9hbXBkdV9mYWN0b3I7XG4rXHR1OCB0eF9xdWFsaXR5W01UNzkyNV9TVEFfU1RBVFNfVFhfUVVBTElUWV9OVU1dO1xuK1x0dTggdHhfcmF0ZV91cF9wZW5hbHR5O1xuK1x0dTggbG93X3RyYWZmaWNfbW9kZTtcbitcdHU4IGxvd190cmFmZmljX2NvdW50O1xuK1x0dTggbG93X3RyYWZmaWNfZGFzaGJvYXJkO1xuK1x0dTggZHluYW1pY19zZ2lfc3RhdGU7XG4rXHR1OCBkeW5hbWljX3NnaV9zY29yZTtcbitcdHU4IGR5bmFtaWNfYndfc3RhdGU7XG4rXHR1OCBkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZTtcbitcdHU4IHZodF9ub25fc3BfcmF0ZV9zdGF0ZTtcbitcdHU4IHJzdjZbM107XG4rXHR1OCByc3Y3WzJdO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RydWN0IG10NzkyNV9zdGFfcmVjX2xvb2t1cCB7XG4rXHRpbnQgc3RhX3JlY19pZHg7XG4rfTtcbitcbisvKiBGaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgc25hcHNob3QsIG1pcnJvciBHZW40bSBzdHJ1Y3QgVU5JX0VWRU5UX1NUQVRfV1RCTC5cbisgKlxuKyAqIFRoZSBmaXJtd2FyZSBSQSBtYWludGFpbnMgdXAgdG8gTVQ3OTI1X0FVVE9fUkFURV9OVU0gY2FuZGlkYXRlIHJhdGVzIGluXG4rICogcmF0ZV9jb2RlW10uIHJhdGVfaWR4IHRlbGxzIHdoaWNoIGVudHJ5IGlzIGN1cnJlbnRseSBpbiB1c2UsIHNvIGEgZHVtcCBjYW5cbisgKiBwb2ludCBhdCBpdCB3aXRoIFwiLS1cdTAwM2VcIi4gZmNhcCBpcyB0aGUgYmFuZHdpZHRoIGNhcGFiaWxpdHkgYW5kIHRoZSBsZHBjL3NnaVxuKyAqIGZsYWdzIGRlc2NyaWJlIHRoZSBwZXItbW9kZSBjb2RpbmcvZ3VhcmQtaW50ZXJ2YWwgdXNlZCBmb3IgdGhvc2UgcmF0ZXMuXG4rICovXG4rc3RydWN0IG10NzkyNV93dGJsX3JhdGUge1xuK1x0X19sZTE2IHRhZztcbitcdF9fbGUxNiBsZW47XG4rXHR1OCByeF9yY3BpMDtcbitcdHU4IHJ4X3JjcGkxO1xuK1x0dTggY2JybjtcbitcdHU4IGZjYXA7XG4rXHR1OCBzcGVfaWR4O1xuK1x0dTggZzI7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlcyMCAqL1xuK1x0dTggZzQ7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlc0MCAqL1xuK1x0dTggZzg7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlc4MCAqL1xuK1x0dTggZzE2O1x0XHRcdC8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXMTYwICovXG4rXHR1OCBnMl9oZTtcdFx0LyogR0ksIEhFLCBCVzIwICovXG4rXHR1OCBnNF9oZTtcdFx0LyogR0ksIEhFLCBCVzQwICovXG4rXHR1OCBnOF9oZTtcdFx0LyogR0ksIEhFLCBCVzgwICovXG4rXHR1OCBnMTZfaGU7XHRcdC8qIEdJLCBIRSwgQlcxNjAgKi9cbitcdHU4IGdpX2VodDtcdFx0LyogR0ksIEVIVCAqL1xuK1x0dTggaHRfbGRwYztcbitcdHU4IHZodF9sZHBjO1xuK1x0dTggaGVfbGRwYztcbitcdHU4IGVodF9sZHBjO1xuK1x0dTggYWY7XG4rXHR1OCByYXRlX2lkeDtcdFx0LyogaW5kZXggaW50byByYXRlX2NvZGVbXSBjdXJyZW50bHkgaW4gdXNlICovXG4rXHRfX2xlMTYgcmF0ZV9jb2RlW01UNzkyNV9BVVRPX1JBVEVfTlVNXTtcbitcdF9fbGUzMiByc3ZbNF07XG4rfSBfX3BhY2tlZDtcbitcbitpbnRcbittdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICpzdGFfcmVjX2lkeCk7XG4rXG4rdm9pZFxuK210NzkyNV9wcmludF9sYXN0X3R4X3JhdGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBfX2xlMzIgbGVfdHh2WzNdKTtcbitcbit1OFxuK210NzkyNV93dGJsX2dldF9zZ2koY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyLCB1OCB0eG1vZGUsIHU4IGZjYXApO1xuK1xuK3U4XG4rbXQ3OTI1X3d0YmxfZ2V0X2xkcGMoY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyLCB1OCB0eG1vZGUpO1xuK1xuK2NoYXIgKm10NzkyNV9od19yYXRlX29mZG1fc3RyKHU4IG9mZG1faWR4KTtcbitcbitpbnQgbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUxNiB3bGFuX2lkeCxcbitcdFx0XHQgICAgIHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICpyYXRlKTtcbitcbitpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxuK1x0XHRcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cyk7XG4rXG4raW50IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGJhbmRfaWR4LFxuK1x0XHRcdCAgICBjb25zdCB1MzIgKmNvdW50ZXJzLCB1OCBjb3VudGVyX251bSxcbitcdFx0XHQgICAgdTY0ICp2YWx1ZXMpO1xuK1xuKy8qIEdFVF9TVEFUX0lORk8gKFVOSV9DTURfSURfR0VUX1NUQVRJU1RJQ1MgPSAweDIzKSxcbisgKiBzdWItY29tbWFuZCBVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19MSU5LX1FVQUxJVFkgPSAxLlxuKyAqXG4rICogQGJhbmRfaWR4OiAgICAgICAgICAgIGJhbmQvQlNTIGluZGV4ICgwLi4zKVxuKyAqIEByc3NpOiAgICAgICAgICAgICAgICBvdXQsIG1vdmluZy1hdmVyYWdlIGJlYWNvbiBSU1NJIChkQm0pLCBtYXkgYmUgTlVMTFxuKyAqIEB0eF9saW5rX3NwZWVkX2ticHM6ICBvdXQsIFRYIGxpbmsgc3BlZWQgaW4ga2JpdC9zLCBtYXkgYmUgTlVMTFxuKyAqXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9FTlQgaWYgdGhlIGJhbmQncyBsaW5rIHF1YWxpdHkgaXMgbm90IHJlYWR5LlxuKyAqXG4rICogTk9URTogZmlybXdhcmUgcHJvdmlkZXMgb25seSBSU1NJIGFuZCBUWCByYXRlIGhlcmUuIFJYIHJhdGUvYmFuZHdpZHRoIGFyZVxuKyAqIG5vdCBpbiB0aGlzIGV2ZW50OyByZWFkIHdjaWQtXHUwMDNlcmF0ZSBmb3IgdGhlIFJYIHJhdGUuXG4rICovXG4raW50IG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCBiYW5kX2lkeCxcbitcdFx0XHRcdHM4ICpyc3NpLCB1MzIgKnR4X2xpbmtfc3BlZWRfa2Jwcyk7XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToxMjozMS4zMzk2Mzg1MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTMxNzM0MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlYnVnZnMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIGBtdDc5MjVgIHdpcmVsZXNzIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBkcml2ZXIncyBmdXp6YWJpbGl0eS4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgZGVidWdmcyBmaWxlLCBgc3RhdHNgLCBmb3IgdGhlIGBtdDc5MjVgIGRyaXZlci4gSXQgaW5jbHVkZXMgYHN0YXRzLmNgLCBgc3RhdHMuaGAgYW5kIG1vZGlmaWVzIGBkZWJ1Z2ZzLmNgIHRvIHJlZ2lzdGVyIHRoZSBmaWxlIGFuZCBhbHNvIGFkZHMgc29tZSBuZXcgZW51bXMgaW4gYG10NzZfY29ubmFjX21jdS5oYC5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWwgY29kZSBwYXRocyB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBUaGUgYHN0YXRzYCBkZWJ1Z2ZzIGZpbGUgc2VlbXMgdG8gYmUgcmVhZGluZyBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlIHZpYSBNQ1UgY29tbWFuZHMuIERlYnVnZnMgZmlsZXMgYXJlIGdlbmVyYWxseSBsb3ctcHJpb3JpdHkgZm9yIGZ1enppbmcsIHVubGVzcyB0aGUgcGFyc2luZyBvciBzdGF0ZSBjaGFuZ2UgaXMgY29tcGxleCwgYnV0IGhlcmUgaXQncyBqdXN0IGEgc2ltcGxlIHF1ZXJ5LWFuZC1wcmludCBzaXR1YXRpb24uXG5cbkxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEZyb20gaW5zcGVjdGluZyBgbXQ3OTI1L2RlYnVnZnMuY2AsIHRoZSBwYXRjaCBjcmVhdGVzIHRoaXMgZGVidWdmcyBmaWxlIHVzaW5nIGBkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGVgIGFuZCBhc3NvY2lhdGVzIGl0IHdpdGggYG10NzkyeF9zdGF0c2AuIFJpZ2h0LCBzbyBpdCdzIGEgc2ltcGxlIGRlYnVnZnMgZmlsZS4gQWxsIHRoZSBhY3R1YWwgd29yayBoYXBwZW5zIHdpdGhpbiBgbXQ3OTJ4X3N0YXRzYCwgd2hpY2ggaXRzZWxmIGNhbGxzIHZhcmlvdXMgZnVuY3Rpb25zIGRlZmluZWQgaW4gYHN0YXRzLmNgLiBMb29raW5nIGF0IHRob3NlIGZ1bmN0aW9ucyDigJMgYG10NzkyNV9nZXRfYXBfc3RhX3JlY19pZHhgLCBgbXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZWAsIGFuZCBzbyBvbiDigJMgaXQncyBjbGVhciB0aGV5J3JlIGFsbCByZWxhdGVkIHRvIGdhdGhlcmluZyBhbmQgcHJpbnRpbmcgdGhlc2Ugc3RhdHMuXG5cbkFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zICpleHBvc2VkKiBvciB1c2VkIG91dHNpZGUgb2YgdGhlIGRlYnVnZnMgZW50cnk/IEkgbmVlZCB0byBtYWtlIHN1cmUuIE5vcGUsIHRoZXkncmUgYWxsIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBtdDc5Mnhfc3RhdHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBvZiB0aGVzZSByb3V0aW5lcyBpbiBvdGhlciBwYXRjaGVzIGluIHRoZSBzZXJpZXMuIEJ1dCBmcm9tIHRoZSBwYXRjaCBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eWAgaXMgbm90IHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGlzIHBhdGNoLlxuXG5TbywgaXQncyAqanVzdCogYWRkaW5nIGEgZGVidWdmcyBmaWxlLiBFdmVuIHRob3VnaCBpdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgZmlybXdhcmUgdmlhIE1DVSBjb21tYW5kcywgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIGlzbid0IGNoYW5naW5nIGhvdyB0aGUgY29yZSBkcml2ZXIgKmZ1bmN0aW9ucyouIE5vdyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHByb21wdCBmb3IgbXkgYW5hbHlzaXMuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHRoaW5ncyBsaWtlOlxuXG4qICAgTW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50c1xuKiAgIExvZ2dpbmcgKHByaW50aywgcHJfZXJyKSBvciB0cmFjZXBvaW50c1xuKiAgIENvbnN0YW50L21hY3JvIGNoYW5nZXMgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24gZmxvd1xuKiAgIFVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzXG5cbkRlYnVnZnMgYWRkaXRpb25zIGZvciBzdGF0aXN0aWNzIGZhbGwgdW5kZXIgdGhlIFwicHVyZWx5IGRlY29yYXRpdmVcIiBjYXRlZ29yeS4gVGhleSBkb24ndCBjaGFuZ2UgaG93IHRoZSBkcml2ZXIgKm9wZXJhdGVzKi4gU28gZnJvbSB0aGUgcHJvbXB0LCBJJ20gbGVhbmluZyB0b3dhcmQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkFsc28sIEkgaGF2ZSB0byBjb25zaWRlciB0aGF0IGBtdDc5MjVgIGlzIGEgTWVkaWFUZWsgV2ktRmkgNyBkcml2ZXIgKFBDSWUvVVNCKS4gV2hpbGUgbWFjODAyMTFfaHdzaW0gKnNpbXVsYXRlcyogV2ktRmksIGl0IGRvZXNuJ3QgZW11bGF0ZSB0aGUgc3BlY2lmaWMgaGFyZHdhcmUuIFRoaXMgZHJpdmVyIG5lZWRzIHJlYWwgaGFyZHdhcmUgb3IgYW4gZW11bGF0b3IuIEJ1dCwgd2FpdCwgaXMgYG10NzkyNXVgIGEgVVNCIGRyaXZlcj8gU2luY2UgdGhlIHByb21wdCBnaXZlcyBVU0IgYSBwYXNzLCBjYW4gc3l6a2FsbGVyIGZ1enogdGhlIGBtdDc5MjV1YCBkcml2ZXIgdmlhIGB2aGNpYD8gU3l6a2FsbGVyIGhhcyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMgdmlhIGR1bW15XFxfaGNkL3ZoY2kuIEknbSBnb2luZyB0byBzZXQgYXNpZGUgdGhlIFBDSWUgdnMgVVNCIGRpc2N1c3Npb24sIGJlY2F1c2UgdGhlIHBhdGNoIG9ubHkgYWRkcyBhIHJlYWQgZnVuY3Rpb24gdG8gZGVidWdmcy5cblxuVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBhIGRpYWdub3N0aWMgdG9vbC4gSXQgZG9lc24ndCBtb2RpZnkgdGhlIGRyaXZlcidzIGZ1bmN0aW9uYWwgYmVoYXZpb3IgaW4gYW55IHdheS4gSSdtIGNvbmZpZGVudCBpbiByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgY2FuIG5vdyB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgcHJvdmlkZSB0aGF0IHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwNDIsIk91dHB1dFRva2VucyI6NjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MTI6NTAuNjU2OTg0MDg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYSBkZWJ1Z2ZzIGVudHJ5IHRvIHF1ZXJ5IGFuZCBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlLiBJdCBpcyBhIGRpYWdub3N0aWMvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGRyaXZlcidzIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgZGVidWdmcyBlbnRyeSB0byBxdWVyeSBhbmQgcHJpbnQgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZS4gSXQgaXMgYSBkaWFnbm9zdGljL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBkcml2ZXIncyBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEyOjUwLjY1NzAwMzA4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhjlc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 08:57:42 +0000 UTC FinishedAt: 2026-08-27 09:12:52 +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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgZGVidWdmcyBlbnRyeSB0byBxdWVyeSBhbmQgcHJpbnQgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZS4gSXQgaXMgYSBkaWFnbm9zdGljL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBkcml2ZXImIzM5O3MgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWU1ZGI1YmQxZDNjY2VjNDk4YmEyMjg0NzJlNzFiNDY4YWFiNGRiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA5OjEyOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oXG5pbmRleCAwZWRlZGE1NjllOWE1Li5iZjBmMTA1Yzc4NmU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaFxuQEAgLTE0ODMsNiAmIzQzOzE0ODMsMTc5IEBAIGVudW0ge1xuIFx0TVRfTklDX0NBUF9FTUxfQ0FQID0gMHgyMixcbiB9O1xuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQkFTSUMgPSAwLFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkgPSAxLFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19TVEEgPSAyLFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19CVUdfUkVQT1JUID0gMyxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfVFhfU1RBVFMgPSA0LFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19BTExfU1RBVFMgPSA1LFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19FTUxfU1RBVFMgPSA2LFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19SRUdVTEFSX1NUQVRTID0gNyxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQlNTX0xJTktfUVVBTElUWSA9IDgsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX01MX0NITkxfQ09ORCA9IDksXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgPSAxMCxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19MQVlFUl9TVEFUUyA9IDEyOCxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfUFBEVV9MQVRFTkNZID0gMTI5LFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19DVVJSRU5UX1RYX1JBVEUgPSAxMzAsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9UWF9CSVRSQVRFX01PTklUT1IgPSAxMzEsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0dFVF9QUkVESUNUX1RYX0JJVFJBVEUgPSAxMzIsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9BVFBTX1RZUEVfUkFURV9NT0RFID0gMTMzLFxuJiM0MztcdFVOSV9DTURfSURfU1RBVElTVElDU19TRVRfQkVBQ09OX1JFUE9SVCA9IDEzNCxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQlNTX0NVUlJFTlRfVFhfUkFURSA9IDEzNSxcbiYjNDM7XHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfR0VUX0JTU19QUkVESUNUX1RYX0JJVFJBVEUgPSAxMzYsXG4mIzQzO1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX01BWF9OVU1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gbXQ3OTI1X21pYl9jb3VudGVyIHtcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfRkNTX0VSUiA9IDAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1cgPSAxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9NUERVID0gMixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQgPSAzLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9UT1RBTF9CWVRFID0gNCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfVkFMSURfQU1QRFVfU0YgPSA1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9WQUxJRF9CWVRFID0gNixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQ0hBTk5FTF9JRExFID0gNyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfVkVDX0RST1AgPSA4LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9ERUxJTUlURVJfRkFJTCA9IDksXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1ZFQ19NSVNNQVRDSCA9IDEwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSA9IDExLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSA9IDEyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUUgPSAxMyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FID0gMTQsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1BGX0RST1AgPSAxNSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfTEVOX01JU01BVENIID0gMTYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1BfQ0NBX1RJTUUgPSAxNyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19DQ0FfVElNRSA9IDE4LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUUgPSAxOSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUF9FRF9USU1FID0gMjAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JDTl9UWCA9IDIxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18yME1IWiA9IDIyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV180ME1IWiA9IDIzLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV184ME1IWiA9IDI0LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18xNjBNSFogPSAyNSxcbiYjNDM7XHRVTklfQ01EX1JNQUNfQ05UX09CU1NfQUlSVElNRSA9IDI2LFxuJiM0MztcdFVOSV9DTURfUk1BQ19DTlRfTk9OV0lGSV9BSVJUSU1FID0gMjcsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0RVUl9DTlQgPSAyOCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfRFVSX0NOVCA9IDI5LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CQV9DTlQgPSAzMCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfTUFDMlBIWV9UWF9USU1FID0gMzEsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX09VVF9PRl9SQU5HRV9DT1VOVCA9IDMyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9JQkZfVFggPSAzMyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfRUJGX1RYID0gMzQsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX01VQkZfVFggPSAzNSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfQkZfVkhURkJLID0gMzYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0hURkJLID0gMzcsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0hFRkJLID0gMzgsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JGRUVfVFhGQktfQkZQT0xMX1RSSSA9IDM5LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX1RSSSA9IDQwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1JYX0ZCS0NRSSA9IDQxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1JYX05EUCA9IDQyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9CRl9JQkZfVVBUID0gNDMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0VCRl9VUFQgPSA0NCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQkZFRV9TUF9BQk9SVCA9IDQ1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1RCX0xFTl9FUlIgPSA0NixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19NVVRFID0gNDcsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JGRUVfVE1BQ19BQk9SVCA9IDQ4LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX0NQTCA9IDQ5LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CRkVFX0NPQU5UX0JMS1RYID0gNTAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JGRUVfRkJLX1NFRyA9IDUxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9OQVZfVElNRSA9IDUyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9BQk9SVF9DTlQxID0gNTMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDAgPSA1NCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMyA9IDU1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9BQk9SVF9DTlQyID0gNTYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVCA9IDU3LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MxX1JUU19UWF9DTlQgPSA1OCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMl9SVFNfVFhfQ05UID0gNTksXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzNfUlRTX1RYX0NOVCA9IDYwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1JUU19SRVRSWSA9IDYxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MxX1JUU19SRVRSWSA9IDYyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MyX1JUU19SRVRSWSA9IDYzLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MzX1JUU19SRVRSWSA9IDY0LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0JBX01JU1MgPSA2NSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMV9CQV9NSVNTID0gNjYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfQkFfTUlTUyA9IDY3LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MzX0JBX01JU1MgPSA2OCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCA9IDY5LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MxX0FDS19GQUlMID0gNzAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfQUNLX0ZBSUwgPSA3MSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTM19BQ0tfRkFJTCA9IDcyLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZID0gNzMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzFfRlJBTUVfUkVUUlkgPSA3NCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMl9GUkFNRV9SRVRSWSA9IDc1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MzX0ZSQU1FX1JFVFJZID0gNzYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMiA9IDc3LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MxX0ZSQU1FX1JFVFJZXzIgPSA3OCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMl9GUkFNRV9SRVRSWV8yID0gNzksXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzNfRlJBTUVfUkVUUllfMiA9IDgwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9BMV9TRUFSQ0ggPSA4MSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfRFJPUF9NUERVID0gODIsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX1VOV0FOVEVEID0gODMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ZDU19PSyA9IDg0LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TVV9UWF9PSyA9IDg1LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9GVUxMX0JXID0gODYsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0FVVE9fQlcgPSA4NyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQ0NBX1NBTVBMRV9JRExFID0gODgsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9TQU1QTEVfQUNUSVZFID0gODksXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9USU1FID0gOTAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfMjBCV19DQ0FfVElNRSA9IDkxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TXzQwQldfQ0NBX1RJTUUgPSA5MixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU184MEJXX0NDQV9USU1FID0gOTMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfMTYwQldfQ0NBX1RJTUUgPSA5NCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18wX0VEX1RJTUUgPSA5NSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xX0VEX1RJTUUgPSA5NixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18yX0VEX1RJTUUgPSA5NyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18zX0VEX1RJTUUgPSA5OCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV180X0VEX1RJTUUgPSA5OSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV181X0VEX1RJTUUgPSAxMDAsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfNl9FRF9USU1FID0gMTAxLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzdfRURfVElNRSA9IDEwMixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV184X0VEX1RJTUUgPSAxMDMsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfOV9FRF9USU1FID0gMTA0LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEwX0VEX1RJTUUgPSAxMDUsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTFfRURfVElNRSA9IDEwNixcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xMl9FRF9USU1FID0gMTA3LFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEzX0VEX1RJTUUgPSAxMDgsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTRfRURfVElNRSA9IDEwOSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xNV9FRF9USU1FID0gMTEwLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18zMjBNSFogPSAxMTEsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0RETE1UX1JORzAgPSAxMTIsIC8qIFJuZzB+Um5nNCAxMTJ+MTE2ICovXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMyA9IDExNywgLyogMTE3fjEyMCAqL1xuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYID0gMTIxLCAvKiAxMjF+MTI0ICovXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfVFhfREFUQSA9IDEyNSwgLyogMTI1fjEyOCAqL1xuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYX0JZVEUgPSAxMjksIC8qIDEyOX4xMzIgKi9cbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfT0tfQlNTMCA9IDEzMywgLyogMTMzfjEzNiAqL1xuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9SWF9CWVRFX0JTUzAgPSAxMzcsIC8qIDEzN34xNDAgKi9cbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfREFUQV9CU1MwID0gMTQxLCAvKiAxNDF+MTQ0ICovXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX01CU1MwX1RYX09LID0gMTQ1LCAvKiAxNDV+MTYwICovXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX01CU1MwX1RYX0JZVEUgPSAxNjEsIC8qIDE2MX4xNzYgKi9cbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfT0tfTUJTUzAgPSAxNzcsIC8qIDE3N34xOTIgKi9cbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfQllURV9NQlNTMCA9IDE5MywgLyogMTkzfjIwOCAqL1xuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9BTVBEVSA9IDIwOSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSA9IDIxMCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfQUNLRUQgPSAyMTEsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX01BWF9OVU1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gRU5VTV9VTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBRyB7XG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQkFTSUMgPSAwLFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEsXG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfU1RBID0gMixcbiYjNDM7XHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CVUdfUkVQT1JUID0gMyxcbiYjNDM7XHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19FTUxfU1RBVFMgPSA2LFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1JFR1VMQVJfU1RBVFMgPSA3LFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JTU19MSU5LX1FVQUxJVFkgPSA4LFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0dFVF9NTF9DSE5MX0NPTkQgPSA5LFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1NUQVRfV1RCTCA9IDEwLFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfTEFZRVJfU1RBVFMgPSAweDgwLFxuJiM0MztcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1BQRFVfTEFURU5DWSxcbiYjNDM7XHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19DVVJSRU5UX1RYX1JBVEUsXG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQkVBQ09OX1JFUE9SVCA9IDB4ODYsXG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX0NVUlJFTlRfVFhfUkFURSA9IDB4ODcsXG4mIzQzO1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX1BSRURfVFhfQklUUkFURSA9IDB4ODgsXG4mIzQzO307XG4mIzQzO1xuICNkZWZpbmUgVU5JX1dPV19ERVRFQ1RfVFlQRV9NQUdJQ1x0XHRCSVQoMClcbiAjZGVmaW5lIFVOSV9XT1dfREVURUNUX1RZUEVfQU5ZXHRcdFx0QklUKDEpXG4gI2RlZmluZSBVTklfV09XX0RFVEVDVF9UWVBFX0RJU0NPTk5FQ1RcdFx0QklUKDIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVxuaW5kZXggZjlkY2MwYmJhMzkzYy4uMzg2M2E4OWI4OTc0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVxuQEAgLTQsNyAmIzQzOzQsNyBAQCBvYmotJChDT05GSUdfTVQ3OTI1X0NPTU1PTikgJiM0Mzs9IG10NzkyNS1jb21tb24ub1xuIG9iai0kKENPTkZJR19NVDc5MjVFKSAmIzQzOz0gbXQ3OTI1ZS5vXG4gb2JqLSQoQ09ORklHX01UNzkyNVUpICYjNDM7PSBtdDc5MjV1Lm9cbiBcbi1tdDc5MjUtY29tbW9uLXkgOj0gbWFjLm8gbWN1Lm8gcmVnZC5vIG1haW4ubyBpbml0Lm8gZGVidWdmcy5vIG5hbi5vXG4mIzQzO210NzkyNS1jb21tb24teSA6PSBtYWMubyBtY3UubyByZWdkLm8gbWFpbi5vIGluaXQubyBkZWJ1Z2ZzLm8gbmFuLm8gc3RhdHMub1xuIG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgJiM0Mzs9IHRlc3Rtb2RlLm9cbiBtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3Uub1xuIG10NzkyNXUteSA6PSB1c2Iub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xuaW5kZXggZDAxZmY0OWRlNDdhZi4uN2E0MGQ1YWM0N2RhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG5AQCAtMSw4ICYjNDM7MSwxMSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjMgTWVkaWFUZWsgSW5jLiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDttdDc5MjUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O21jdS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N0YXRzLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50XG4gbXQ3OTI1X3JlZ19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbkBAIC0yODYsNiAmIzQzOzI4OSwzNDYgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIFxuIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgXCYjMzQ7JWxsZFxcblwmIzM0Oyk7XG4gXG4mIzQzO3N0YXRpYyBjb25zdCB1MzIgc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzW10gPSB7XG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ZDU19FUlIsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1csXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX01QRFUsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0FNUERVX1JYX0NPVU5ULFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9QRl9EUk9QLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0NIQU5ORUxfSURMRSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUUsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9QX0NDQV9USU1FLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9TX0NDQV9USU1FLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9QX0VEX1RJTUUsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JDTl9UWCxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfVFhfQldfNDBNSFosXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18xNjBNSFosXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfQkFfTUlTUyxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIsXG4mIzQzO1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0FDS19GQUlMLFxuJiM0MztcdFVOSV9DTURfTUlCX0NOVF9BTVBEVSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSxcbiYjNDM7XHRVTklfQ01EX01JQl9DTlRfQU1QRFVfQUNLRUQsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBEdW1wIHRoZSB3aG9sZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgYW5kIG1hcmsgdGhlIGVudHJ5IGN1cnJlbnRseSBpbiB1c2VcbiYjNDM7ICogd2l0aCBcJiMzNDstLVx1MDAzZVwmIzM0O1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7bXQ3OTI1X2R1bXBfYXV0b19yYXRlX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqcyxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3cilcbiYjNDM7e1xuJiM0MztcdHU4IGZjYXAgPSB3ci1cdTAwM2VmY2FwO1xuJiM0MztcdHU4IHJhdGVfaWR4ID0gd3ItXHUwMDNlcmF0ZV9pZHg7XG4mIzQzO1x0dTggY2JybiA9IHdyLVx1MDAzZWNicm47XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIEN1ciBSYXRlIEluZGV4ID0gJXVcXG5cJiMzNDssIFwmIzM0OyBcJiMzNDssIHJhdGVfaWR4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3OTI1X0FVVE9fUkFURV9OVU07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MTYgcmF0ZV9jb2RlID0gbGUxNl90b19jcHUod3ItXHUwMDNlcmF0ZV9jb2RlW2ldKTtcbiYjNDM7XHRcdHU4IHR4bW9kZSA9IE1UNzkyNV9IV19SQVRFX1RPX01PREUocmF0ZV9jb2RlKTtcbiYjNDM7XHRcdHU4IHJhdGUgPSBNVDc5MjVfSFdfUkFURV9UT19NQ1MocmF0ZV9jb2RlKTtcbiYjNDM7XHRcdHU4IG5zdHMgPSBNVDc5MjVfSFdfUkFURV9UT19OU1MocmF0ZV9jb2RlKSAmIzQzOyAxO1xuJiM0MztcdFx0dTggc3RiYyA9IE1UNzkyNV9IV19SQVRFX1RPX1NUQkMocmF0ZV9jb2RlKTtcbiYjNDM7XHRcdHU4IGRjbSA9IE1UNzkyNV9IV19SQVRFX1RPX0RDTShyYXRlX2NvZGUpO1xuJiM0MztcdFx0dTggZXJzdTEwNnQgPSBNVDc5MjVfSFdfUkFURV9UT18xMDZUKHJhdGVfY29kZSk7XG4mIzQzO1x0XHR1OCBzZ2kgPSBtdDc5MjVfd3RibF9nZXRfc2dpKHdyLCB0eG1vZGUsIGZjYXApO1xuJiM0MztcdFx0dTggbGRwYyA9IG10NzkyNV93dGJsX2dldF9sZHBjKHdyLCB0eG1vZGUpO1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbW9kZV9zdHIgPSBcJiMzNDtOL0FcJiMzNDs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRjbSlcbiYjNDM7XHRcdFx0cmF0ZSA9IE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJzdTEwNnQpXG4mIzQzO1x0XHRcdHJhdGUgPSBNVDc5MjVfSFdfUkFURV9VTk1BU0tfMTA2VChyYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHhtb2RlIFx1MDAzYyBBUlJBWV9TSVpFKG10NzkyNV90eF9tb2RlX3N0cikpXG4mIzQzO1x0XHRcdG1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07XG4mIzQzO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDtSYXRlIGluZGV4WyVkXSAgICAlc1wmIzM0OywgaSxcbiYjNDM7XHRcdFx0ICAgcmF0ZV9pZHggPT0gaSA/IFwmIzM0Oy0tXHUwMDNlIFwmIzM0OyA6IFwmIzM0OyAgICBcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdC8qIHJhdGUvTUNTIGZpZWxkICovXG4mIzQzO1x0XHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxuJiM0MztcdFx0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzLCBcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltyYXRlIFx1MDAyNiAweDNdKTtcbiYjNDM7XHRcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXG4mIzQzO1x0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0OywgbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIocmF0ZSkpO1xuJiM0MztcdFx0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHxcbiYjNDM7XHRcdFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YpXG4mIzQzO1x0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7TUNTJWQsIFwmIzM0OywgcmF0ZSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMlZF9NQ1MlZCwgXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0YmMgPyBcJiMzNDtOU1RTXCYjMzQ7IDogXCYjMzQ7TlNTXCYjMzQ7LCBuc3RzLCByYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBiYW5kd2lkdGg6IG1pcnJvciB0aGUgQ0NLL09GRE0gLVx1MDAzZSBCVzIwIGFuZCBjYnJuIGhhbmRsaW5nICovXG4mIzQzO1x0XHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLIHx8XG4mIzQzO1x0XHQgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSlcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbMF0pO1xuJiM0MztcdFx0ZWxzZSBpZiAoaSBcdTAwM2UgY2JybilcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGZjYXAgXHUwMDNjIDUgP1xuJiM0MztcdFx0XHRcdCAgIChmY2FwIFx1MDAzZSBNVDc5MjVfQldfMjAgP1xuJiM0MztcdFx0XHRcdCAgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcCAtIDFdIDpcbiYjNDM7XHRcdFx0XHQgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXBdKSA6XG4mIzQzO1x0XHRcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGZjYXAgXHUwMDNjIDUgPyBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0gOlxuJiM0MztcdFx0XHRcdCAgIG10NzkyNV90eF9yYXRlX2J3X3N0cls1XSk7XG4mIzQzO1xuJiM0MztcdFx0LyogR0kgLyBwcmVhbWJsZSAqL1xuJiM0MztcdFx0aWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSylcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LCByYXRlIFx1MDAzYyA0ID8gXCYjMzQ7TFBcJiMzNDsgOiBcJiMzNDtTUFwmIzM0Oyk7XG4mIzQzO1x0XHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuJiM0MztcdFx0XHQ7IC8qIE9GRE0gaGFzIG5vIEdJL3ByZWFtYmxlIHRvIHByaW50ICovXG4mIzQzO1x0XHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCB8fFxuJiM0MztcdFx0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiB8fFxuJiM0MztcdFx0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfVkhUIHx8XG4mIzQzO1x0XHRcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIpXG4mIzQzO1x0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0Oywgc2dpID09IDAgPyBcJiMzNDtMR0lcJiMzNDsgOiBcJiMzNDtTR0lcJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzLCBcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgc2dpID09IDAgPyBcJiMzNDtTR0lcJiMzNDsgOlxuJiM0MztcdFx0XHRcdCAgIChzZ2kgPT0gMSA/IFwmIzM0O01HSVwmIzM0OyA6IFwmIzM0O0xHSVwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRcdC8qIG1vZGUsIERDTSwgMTA2dCwgU1RCQywgY29kaW5nICovXG4mIzQzO1x0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzJXMlcyVzJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIG1vZGVfc3RyLFxuJiM0MztcdFx0XHQgICBkY20gPyBcJiMzNDssIERDTVwmIzM0OyA6IFwmIzM0O1wmIzM0OywgZXJzdTEwNnQgPyBcJiMzNDssIDEwNnRcJiMzNDsgOiBcJiMzNDtcJiMzNDssXG4mIzQzO1x0XHRcdCAgIHN0YmMgPyBcJiMzNDssIFNUQkMsIFwmIzM0OyA6IFwmIzM0OywgXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAobGRwYyA9PSAwIHx8XG4mIzQzO1x0XHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHxcbiYjNDM7XHRcdFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pID9cbiYjNDM7XHRcdFx0ICAgXCYjMzQ7QkNDXCYjMzQ7IDogXCYjMzQ7TERQQ1wmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG10NzkyeF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzOCByc3NpID0gMDtcbiYjNDM7XHR1OCBiYW5kX2lkeCA9IDA7XG4mIzQzO1x0Ym9vbCB3dGJsX3JhdGVfdmFsaWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIHN0YXRzX3ZhbHVlID0gMDtcbiYjNDM7XHR1MzIgdHhfbGlua19zcGVlZF9rYnBzID0gMDtcbiYjNDM7XHR1NjQgdHhfdG90YWwgPSAwO1xuJiM0MztcdHU2NCB0eF9mYWlsID0gMDtcbiYjNDM7XHR1NjQgdHhfcGVyID0gMDtcbiYjNDM7XHR1MzIgdHhfcGVyX3JlbSA9IDA7XG4mIzQzO1x0LyogVU5JX0NNRF9NSUJfREFUQSAqL1xuJiM0MztcdHU2NCBtaWJfdmFsdWVzW0FSUkFZX1NJWkUoc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzKV07XG4mIzQzO1x0c3RydWN0IG10NzkyeF9kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShzLVx1MDAzZXByaXZhdGUpO1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHd0YmxfcmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyAqc3RhdHMgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRiYW5kX2lkeCA9IGRldi1cdTAwM2VtcGh5LmJhbmRfaWR4O1xuJiM0MztcbiYjNDM7XHQgc3RhdHMgPSBremFsbG9jKHNpemVvZigqc3RhdHMpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXN0YXRzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdC8qIEdldCBTVEFfU1RBVFMgKi9cbiYjNDM7XHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuJiM0MztcdHJldCA9IG10NzkyeF9tY3VfZ2V0X3N0YXQoZGV2LCBzdGF0cyk7XG4mIzQzO1x0bXQ3OTJ4X211dGV4X3JlbGVhc2UoZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEdldCBNSUJfU1RBVFMgKi9cbiYjNDM7XHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuJiM0MztcdHJldCA9IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKGRldiwgYmFuZF9pZHgsIHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHQgICAgICBBUlJBWV9TSVpFKHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyksIG1pYl92YWx1ZXMpO1xuJiM0MztcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBHZXQgTGlua19TcGVlZCBhbmQgUlNTSSAqL1xuJiM0MztcdG10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7XG4mIzQzO1x0cmV0ID0gbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5KGRldiwgc3RhdHMtXHUwMDNlYnNzX2lkeCwgXHUwMDI2cnNzaSwgXHUwMDI2dHhfbGlua19zcGVlZF9rYnBzKTtcbiYjNDM7XHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogR2V0IHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgKGJlc3QgZWZmb3J0OyBkbyBub3QgYWJvcnQgdGhlXG4mIzQzO1x0ICogd2hvbGUgc3RhdHMgZHVtcCBpZiB0aGUgV1RCTCBxdWVyeSBpcyBub3QgYXZhaWxhYmxlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuJiM0MztcdGlmICghbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlKGRldiwgc3RhdHMtXHUwMDNld3RibF9pZHgsIFx1MDAyNnd0YmxfcmF0ZSkpXG4mIzQzO1x0XHR3dGJsX3JhdGVfdmFsaWQgPSB0cnVlO1xuJiM0MztcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XG4mIzQzO1xuJiM0MztcdC8qIFByaW50IFNUQV9TVEFUUyBpbmZvICovXG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDsoU1RBKSBjb25uZWN0ZWQgQVAgTUFDIEFkZHJlc3MgPSAlcE1cXG5cJiMzNDssIHN0YXRzLVx1MDAzZW1hY19hZGRyKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBCc3NJZHggPSBbJXVdXFxuXCYjMzQ7LCBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2Vic3NfaWR4KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBTdGFSZWNJZHggPSBbJXVdXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHMtXHUwMDNlc3RhX2lkeCk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUlNTSSA9ICVkXFxuXCYjMzQ7LCBcJiMzNDsgXCYjMzQ7LCByc3NpKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBMaW5rX1NwZWVkID0gJXUgKGtiaXQvcylcXG5cJiMzNDssIFwmIzM0OyBcJiMzNDssIHR4X2xpbmtfc3BlZWRfa2Jwcyk7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIHRlbXBlcmF0dXJlID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2V0ZW1wZXJhdHVyZSk7XG4mIzQzO1xuJiM0MztcdHN0YXRzX3ZhbHVlID0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHJhbnNtaXRfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHJhbnNtaXRfZmFpbF9jb3VudCk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgVHggc3VjY2VzcyA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHNfdmFsdWUpO1xuJiM0MztcbiYjNDM7XHRzdGF0c192YWx1ZSA9IGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZXR4X2ZhaWxfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHhfbGlmZV90aW1lb3V0X2NvdW50KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBUeCBmYWlsIHRvIFJjdiBBQ0sgYWZ0ZXIgcmV0cnkgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzX3ZhbHVlKTtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggTXBkdSA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5yeF9tcGR1X2NudCkpO1xuJiM0MztcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBSeCBGY3MgRXJyb3IgPSAldSAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2VtaWJbYmFuZF9pZHhdLmZjc19lcnJvcikpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFJ4IEZJRk8gZnVsbCA9ICV1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0ucnhfZmlmb19mdWxsKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU07IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgVFJYX0FHR19SQU5HRVslZF0gPSAldSAoUFBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIFwmIzM0OyBcJiMzNDssIGksIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0udHhfcmFuZ2VfYW1wZHVfY250W2ldKSk7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCA9ICV1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0uYW1wZHVfdHhfc2ZfY250KSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgTVBEVXMgaW4gQU1QRFVzIHRyYW5zbWl0dGVkIHdpdGggQUNLIHJlcGx5ID0gJXUgKE1QRFUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5hbXBkdV90eF9hY2tfc2ZfY250KSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgcmF0ZTFfdHhfY250ID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2VyYXRlMV90eF9jbnQpKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICByYXRlMV9mYWlsX2NudCA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlcmF0ZTFfZmFpbF9jbnQpKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICB0cmFpbl91cCA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbGUxNl90b19jcHUoc3RhdHMtXHUwMDNldHJhaW5fdXApKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICB0cmFpbl9kb3duID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBsZTE2X3RvX2NwdShzdGF0cy1cdTAwM2V0cmFpbl9kb3duKSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgaXNfZm9yY2VfdHhfc3RyZWFtID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2Vpc19mb3JjZV90eF9zdHJlYW0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIGlzX2ZvcmNlX3NlX29mZiA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHMtXHUwMDNlaXNfZm9yY2Vfc2Vfb2ZmKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBtYXhfYW1wZHVfZmFjdG9yID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2VtYXhfYW1wZHVfZmFjdG9yKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICB0eF9yYXRlX3VwX3BlbmFsdHkgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZXR4X3JhdGVfdXBfcGVuYWx0eSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgbG93X3RyYWZmaWNfbW9kZSA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHMtXHUwMDNlbG93X3RyYWZmaWNfbW9kZSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgbG93X3RyYWZmaWNfY291bnQgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZWxvd190cmFmZmljX2NvdW50KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBsb3dfdHJhZmZpY19kYXNoYm9hcmQgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZWxvd190cmFmZmljX2Rhc2hib2FyZCk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgZHluYW1pY19zZ2lfc3RhdGUgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZWR5bmFtaWNfc2dpX3N0YXRlKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBkeW5hbWljX3NnaV9zY29yZSA9ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0Oywgc3RhdHMtXHUwMDNlZHluYW1pY19zZ2lfc2NvcmUpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIGR5bmFtaWNfYndfc3RhdGUgPSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIHN0YXRzLVx1MDAzZWR5bmFtaWNfYndfc3RhdGUpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2VkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgdmh0X25vbl9zcF9yYXRlX3N0YXRlID0gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBzdGF0cy1cdTAwM2V2aHRfbm9uX3NwX3JhdGVfc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiBEZWNvZGUgdGhlIFRYIFZlY3RvciBCQlAgbGF0Y2ggdG8gc2hvdyB0aGUgY3VycmVudCBUWCBNQ1MgcmF0ZSAqL1xuJiM0MztcdGlmIChiYW5kX2lkeCBcdTAwM2MgTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTSlcbiYjNDM7XHRcdG10NzkyNV9wcmludF9sYXN0X3R4X3JhdGUocywgc3RhdHMtXHUwMDNldHhfdmVjdG9yW2JhbmRfaWR4XS50eHYpO1xuJiM0MztcbiYjNDM7XHQvKiBEdW1wIHRoZSB3aG9sZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgYW5kIG1hcmsgdGhlIGVudHJ5IGN1cnJlbnRseSAqL1xuJiM0MztcdGlmICh3dGJsX3JhdGVfdmFsaWQpXG4mIzQzO1x0XHRtdDc5MjVfZHVtcF9hdXRvX3JhdGVfdGFibGUocywgXHUwMDI2d3RibF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0c2VxX3B1dHMocywgXCYjMzQ7XFxubWliIHN0YXRlOlxcblwmIzM0Oyk7XG4mIzQzO1x0LyogPT09UnggUmVsYXRlZCBDb3VudGVycz09PSAqL1xuJiM0MztcdHNlcV9wdXRzKHMsIFwmIzM0Oz09PSBSeCBSZWxhdGVkIENvdW50ZXJzID09PVxcblwmIzM0Oyk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggd2l0aCBDUkMgPSAlbGx1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9GQ1NfRVJSXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlID0gJWxsdSAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfRklGT19PVkVSRkxPV10pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFJ4IE1wZHUgPSAlbGx1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9NUERVXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggQU1wZHUgPSAlbGx1IChQUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVF0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFJ4IFBGIERyb3AgPSAlbGx1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QRl9EUk9QXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUnggTGVuIE1pc21hdGNoID0gJWxsdSAoUFBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfTEVOX01JU01BVENIXSk7XG4mIzQzO1xuJiM0MztcdC8qID09PVBoeS9UaW1pbmcgUmVsYXRlZCBDb3VudGVycz09PSAqL1xuJiM0MztcdHNlcV9wdXRzKHMsIFwmIzM0O1xcbj09PSBQaHkvVGltaW5nIFJlbGF0ZWQgQ291bnRlcnMgPT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBDaGFubmVsSWRsZUNudCA9ICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgQ0NBX05BVl9UeF9UaW1lID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBSeF9NRFJEWV9DTlQgPSAlbGx1IChQUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9NRFJEWV0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIENDS19NRFJEWSA9ICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBPRkRNX01EUkRZID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBPRkRNX0dSRUVOX01EUkRZID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBQcmltIENDQSBUaW1lID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0NDQV9USU1FXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgU2VjIENDQSBUaW1lID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9TX0NDQV9USU1FXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUHJpbSBFRCBUaW1lID0gJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0VEX1RJTUVdKTtcbiYjNDM7XG4mIzQzO1x0LyogPT09VHggUmVsYXRlZCBDb3VudGVycyhHZW5lcmljKT09PSAqL1xuJiM0MztcdHNlcV9wdXRzKHMsIFwmIzM0O1xcbj09PSBUeCBSZWxhdGVkIENvdW50ZXJzKEdlbmVyaWMpID09PVxcblwmIzM0Oyk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgQmVhY29uVHhDbnQgPSAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JDTl9UWF0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFR4IDQwTUh6IENudCA9ICVsbHUgIChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9UWF9CV180ME1IWl0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFR4IDgwTUh6IENudCA9ICVsbHUgIChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9UWF9CV184ME1IWl0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFR4IDE2ME1IeiBDbnQgPSAlbGx1ICAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfMTYwTUhaXSk7XG4mIzQzO1xuJiM0MztcdC8qID09PUJTU0lEWzBdIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi9cbiYjNDM7XHRzZXFfcHV0cyhzLCBcJiMzNDtcXG49PT0gQlNTSURbMF0gUmVsYXRlZCBDb3VudGVycyA9PT1cXG5cJiMzNDspO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIEJBIE1pc3MgQ250ID0gJWxsdSAgKFBQRFUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfQkFfTUlTU10pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFJUUyBUeCBDbnQgPSAlbGx1ICAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05UXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgRnJhbWUgUmV0cnkgQ250ID0gJWxsdSAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIEZyYW1lIFJldHJ5IDIgQ250ID0gJWxsdSAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8yXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgUlRTIFJldHJ5IENudCA9ICVsbHUgKE1QRFUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7IFwmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZXSk7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgQWNrIEZhaWxlZCBDbnQgPSAlbGx1IChQUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0FDS19GQUlMXSk7XG4mIzQzO1xuJiM0MztcdC8qID09PUFNUERVIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi9cbiYjNDM7XHRzZXFfcHV0cyhzLCBcJiMzNDtcXG49PT0gQU1QRFUgUmVsYXRlZCBDb3VudGVycyA9PT1cXG5cJiMzNDspO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIFR4IEFNUERVX1BrdF9DbnQgPSAlbGx1ICAoUFBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVdKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBUeCBBTVBEVV9NUERVX1BrdF9DbnQgPSAlbGx1ICAoTVBEVSlcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV0pO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgIEFNUERVIFR4IHN1Y2Nlc3MgPSAlbGx1IChNUERVKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0OyBcJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF0pO1xuJiM0MztcbiYjNDM7XHR0eF90b3RhbCA9IG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVXTtcbiYjNDM7XHR0eF9mYWlsID0gIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVXSAtIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF07XG4mIzQzO1x0dHhfcGVyID0gdHhfdG90YWwgPT0gMCA/IDAgOiBkaXY2NF91NjQoMTAwMCAqIHR4X2ZhaWwsIHR4X3RvdGFsKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUtMjJzICBBTVBEVSBUeCBmYWlsIGNvdW50ICAgPSAlbGx1ICAoTVBEVSksIFBFUj0lbGx1LiUxbGx1JSVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LFxuJiM0MztcdFx0ICAgdHhfZmFpbCxcbiYjNDM7XHRcdCAgIGRpdl91NjRfcmVtKHR4X3BlciwgMTAsIFx1MDAyNnR4X3Blcl9yZW0pLCAodTY0KXR4X3Blcl9yZW0pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtmcmVlKHN0YXRzKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGlyO1xuQEAgLTMxMyw1ICYjNDM7NjU2LDggQEAgaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbiBcdFx0XHRcdCAgICBtdDc5MnhfcG1fc3RhdHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtkZWVwLXNsZWVwXCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19kcyk7XG4gXG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cdTAwM2VtdDc2LmRldiwgXCYjMzQ7c3RhdHNcJiMzNDssIGRpcixcbiYjNDM7XHRcdFx0XHQgICAgbXQ3OTJ4X3N0YXRzKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YTQ3OTUzMDYyYmMzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5jXG5AQCAtMCwwICYjNDM7MSw1ODUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuJiM0MzsvKiBDb3B5cmlnaHQgKEMpIDIwMjYgTWVkaWFUZWsgSW5jLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O210NzkyNS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21jdS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21hYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N0YXRzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19WRVJTSU9OIDFcbiYjNDM7I2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1ZBTElEIDFVXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1UNzkyNV9NSUJfTUFYX0NOVFx0XHRcdDMyXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X01JQl9DTlRfTUFYX05VTVx0XHQ1MTIgIC8qIGZpcm13YXJlIFVOSV9DTURfTUlCX0NOVF9NQVhfTlVNIHVwcGVyIGJvdW5kICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1UNzkyNV9MUV9CQU5EX05VTVx0NFx0XHRcdC8qIExpbmsgcXVhbGl0eSBiYW5kICovXG4mIzQzO1xuJiM0Mztjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X21vZGVfc3RyW10gPSB7XG4mIzQzO1x0XCYjMzQ7Q0NLXCYjMzQ7LCBcJiMzNDtPRkRNXCYjMzQ7LCBcJiMzNDtNTVwmIzM0OywgXCYjMzQ7R0ZcJiMzNDssIFwmIzM0O1ZIVFwmIzM0OywgXCYjMzQ7UExSXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1BMUlBcJiMzNDssIFwmIzM0O0FMUlwmIzM0OywgXCYjMzQ7SEVfU1VcJiMzNDssIFwmIzM0O0hFX0VSXCYjMzQ7LCBcJiMzNDtIRV9UUklHXCYjMzQ7LCBcJiMzNDtIRV9NVVwmIzM0OyxcbiYjNDM7XHRcJiMzNDtFSFRfRVJcJiMzNDssIFwmIzM0O1RPRlwmIzM0OywgXCYjMzQ7RUhUX1RSSUdcJiMzNDssIFwmIzM0O0VIVF9NVVwmIzM0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7Y29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9yYXRlX2Nja19zdHJbXSA9IHtcbiYjNDM7XHRcJiMzNDsxTVwmIzM0OywgXCYjMzQ7Mk1cJiMzNDssIFwmIzM0OzUuNU1cJiMzNDssIFwmIzM0OzExTVwmIzM0OywgXCYjMzQ7Ti9BXCYjMzQ7XG4mIzQzO307XG4mIzQzO1xuJiM0Mztjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW10gPSB7XG4mIzQzO1x0XCYjMzQ7QlcyMFwmIzM0OywgXCYjMzQ7Qlc0MFwmIzM0OywgXCYjMzQ7Qlc4MFwmIzM0OywgXCYjMzQ7QlcxNjAvQlc4MDgwXCYjMzQ7LCBcJiMzNDtCVzMyMFwmIzM0OywgXCYjMzQ7Ti9BXCYjMzQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19yZXEge1xuJiM0MztcdHU4IHJzdls0XTtcbiYjNDM7XHRfX2xlMTYgdGFnO1xuJiM0MztcdF9fbGUxNiBsZW47XG4mIzQzO1x0dTggc3RhX3JlY19pZHg7XG4mIzQzO1x0dTggcnN2MTtcbiYjNDM7XHR1OCBsbHNfcmVhZF9jbGVhcjtcbiYjNDM7XHR1OCByZXNldF9jb3VudGVyO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQge1xuJiM0MztcdHU4IHJzdls0XTtcbiYjNDM7XHRfX2xlMTYgdGFnO1xuJiM0MztcdF9fbGUxNiBsZW47XG4mIzQzO1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHMgc3RhdHM7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBXVEJMIGF1dG8tcmF0ZSByZXF1ZXN0IFRMViwgbWlycm9yIEdlbjRtIHN0cnVjdCBVTklfQ01EX1NUQVRfV1RCTC5cbiYjNDM7ICogVGhlIFJBIHRhZyByZXVzZXMgVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgKDEwKS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfd3RibF9yYXRlX3JlcSB7XG4mIzQzO1x0dTggcnN2WzRdO1xuJiM0MztcdF9fbGUxNiB0YWc7XG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHRfX2xlMTYgd2xhbl9pZHg7XG4mIzQzO1x0X19sZTE2IHJzdjE7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBXVEJMIGF1dG8tcmF0ZSBldmVudCBUTFYuIEZpcm13YXJlIGFuc3dlcnMgY21kIHRhZyAxMCB3aXRoIGV2ZW50IHRhZyAxMi4gKi9cbiYjNDM7c3RydWN0IG10NzkyNV93dGJsX3JhdGVfZXZlbnQge1xuJiM0MztcdHU4IHJzdls0XTtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSByYXRlO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7LyogZml4ZWQgZmllbGQsIG1pcnJvciBVTklfKENNRHxFVkVOVClfTUlCX0lORk8gKi9cbiYjNDM7c3RydWN0IG10NzkyNV9taWJfaGRyIHtcbiYjNDM7XHR1OCBiYW5kX2lkeDtcbiYjNDM7XHR1OCByc3ZbM107XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBPbmUgcmVxdWVzdGVkL3JldHVybmVkIE1JQiBjb3VudGVyLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBX1QuICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfbWliX2RhdGEge1xuJiM0MztcdF9fbGUxNiB0YWc7XHQvKiBVTklfKENNRHxFVkVOVClfTUlCX0RBVEEgPSAwICovXG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHRfX2xlMzIgY291bnRlcjtcdC8qIE1JQiBjb3VudGVyIElEIChlbnVtIG10NzkyNV9taWJfY291bnRlcikgKi9cbiYjNDM7XHRfX2xlNjQgZGF0YTtcdC8qIG9ubHkgdmFsaWQgb24gZXZlbnQ7IGlnbm9yZWQgb24gY21kICovXG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBwZXItYmFuZCBsaW5rIHF1YWxpdHkgZW50cnksIG1pcnJvciBVTklfTElOS19RVUFMSVRZICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfbGlua19xdWFsaXR5IHtcbiYjNDM7XHRzOCByc3NpO1x0XHQvKiBtb3ZpbmctYXZlcmFnZSBiZWFjb24gUlNTSSBvZiBjb25uZWN0ZWQgQVAgKi9cbiYjNDM7XHRzOCBsaW5rX3F1YWxpdHk7XHQvKiBhbHdheXMgMCAqL1xuJiM0MztcdF9fbGUxNiBsaW5rX3NwZWVkO1x0LyogVFggcmF0ZTEsIHVuaXQgNTAwIEtiL3MgKi9cbiYjNDM7XHR1OCBtZWRpdW1fYnVzeV9wY3Q7XHQvKiBhbHdheXMgMCAqL1xuJiM0MztcdHU4IGlzX3JlYWR5O1x0XHQvKiAwOiBmaWVsZHMgaW52YWxpZCwgMTogdmFsaWQgKi9cbiYjNDM7XHR1OCByc3ZbMl07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiByZXF1ZXN0IFRMViwgbWlycm9yIFVOSV9DTURfTElOS19RVUFMSVRZIChoZWFkZXIgJiM0MzsgdGFnL2xlbiBvbmx5KSAqL1xuJiM0MztzdHJ1Y3QgbXQ3OTI1X2xxX3JlcSB7XG4mIzQzO1x0dTggcnN2WzRdO1x0XHQvKiBVTklfQ01EX0dFVF9TVEFUSVNUSUNTIGZpeGVkIGZpZWxkICovXG4mIzQzO1x0X19sZTE2IHRhZztcdFx0LyogVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19RVUFMSVRZID0gMSAqL1xuJiM0MztcdF9fbGUxNiBsZW47XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MzsvKiBldmVudCBUTFYsIG1pcnJvciBVTklfRVZFTlRfTElOS19RVUFMSVRZICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfbHFfZXZlbnQge1xuJiM0MztcdHU4IHJzdls0XTtcdFx0LyogVU5JX0VWRU5UX1NUQVRJU1RJQ1MgZml4ZWQgZmllbGQgKi9cbiYjNDM7XHRfX2xlMTYgdGFnO1x0XHQvKiBVTklfRVZFTlRfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkgPSAxICovXG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSBscVtNVDc5MjVfTFFfQkFORF9OVU1dO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7bXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeF9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG10NzkyNV9zdGFfcmVjX2xvb2t1cCAqbG9va3VwID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTJ4X3ZpZiAqbXZpZjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTJ4X3N0YSAqbXN0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxvb2t1cC1cdTAwM2VzdGFfcmVjX2lkeCBcdTAwM2U9IDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICh2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8ICF2aWYtXHUwMDNlY2ZnLmFzc29jKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtdmlmID0gKHN0cnVjdCBtdDc5MnhfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuJiM0MztcdG1zdGEgPSBtdmlmLVx1MDAzZXdlcF9zdGE7XG4mIzQzO1x0aWYgKCFtc3RhKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1zdGEtXHUwMDNlZGVmbGluay53Y2lkLnN0YSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bG9va3VwLVx1MDAzZXN0YV9yZWNfaWR4ID0gbXN0YS1cdTAwM2VkZWZsaW5rLndjaWQuaWR4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7bXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqc3RhX3JlY19pZHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwIGxvb2t1cCA9IHtcbiYjNDM7XHRcdC5zdGFfcmVjX2lkeCA9IC0xLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2LVx1MDAzZW10NzYubXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhkZXYtXHUwMDNlbXBoeS5odyxcbiYjNDM7XHRcdFx0XHRcdCAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9SRVNVTUVfQUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgIG10NzkyNV9nZXRfYXBfc3RhX3JlY19pZHhfaXRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICBcdTAwMjZsb29rdXApO1xuJiM0MztcbiYjNDM7XHRpZiAobG9va3VwLnN0YV9yZWNfaWR4IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9UQ09OTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxvb2t1cC5zdGFfcmVjX2lkeCBcdTAwM2UgVThfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdCpzdGFfcmVjX2lkeCA9IGxvb2t1cC5zdGFfcmVjX2lkeDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIERlY29kZSB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCBhbmQgcHJpbnQgdGhlIGxhc3QgVFggcmF0ZSAqL1xuJiM0Mzt2b2lkXG4mIzQzO210NzkyNV9wcmludF9sYXN0X3R4X3JhdGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBfX2xlMzIgbGVfdHh2WzNdKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kZV9zdHIgPSBcJiMzNDtOL0FcJiMzNDs7XG4mIzQzO1x0dTggcmF0ZSwgdHhtb2RlLCBmcm1vZGUsIHNnaSwgbGRwYywgbnN0cywgc3RiYywgc3BlLCBkY20sIGVyc3UxMDZ0O1xuJiM0MztcdHM4IHR4cHdyLCBwb3NfdHhwd3I7XG4mIzQzO1x0dTMyIHR4dlszXTtcbiYjNDM7XG4mIzQzO1x0dHh2WzBdID0gbGUzMl90b19jcHUobGVfdHh2WzBdKTtcbiYjNDM7XHR0eHZbMV0gPSBsZTMyX3RvX2NwdShsZV90eHZbMV0pO1xuJiM0MztcdHR4dlsyXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsyXSk7XG4mIzQzO1xuJiM0MztcdGlmICh0eHZbMF0gPT0gMHhmZmZmZmZmZikge1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgJXMgPSAlc1xcblwmIzM0OywgXCYjMzQ7IFwmIzM0OywgXCYjMzQ7TGFzdCBUWCBSYXRlXCYjMzQ7LCBcJiMzNDtOL0FcJiMzNDspO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgJXMgPSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7IFwmIzM0OywgXCYjMzQ7Q2hpcCBPdXQgVFggUG93ZXJcJiMzNDssIFwmIzM0O04vQVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXRlID0gTVQ3OTI1X1RYVl9HRVRfVFhfUkFURSh0eHYpO1xuJiM0MztcdHR4bW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX01PREUodHh2KTtcbiYjNDM7XHRmcm1vZGUgPSBNVDc5MjVfVFhWX0dFVF9UWF9GUk1PREUodHh2KTtcbiYjNDM7XHRuc3RzID0gTVQ3OTI1X1RYVl9HRVRfVFhfTlNUUyh0eHYpICYjNDM7IDE7XG4mIzQzO1x0c2dpID0gTVQ3OTI1X1RYVl9HRVRfVFhfU0dJKHR4dik7XG4mIzQzO1x0bGRwYyA9IE1UNzkyNV9UWFZfR0VUX1RYX0xEUEModHh2KTtcbiYjNDM7XHRzdGJjID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyh0eHYpO1xuJiM0MztcdHR4cHdyID0gTVQ3OTI1X1RYVl9HRVRfVFhfUFdSKHR4dik7XG4mIzQzO1x0c3BlID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1BFX0lEWCh0eHYpO1xuJiM0MztcdGRjbSA9IE1UNzkyNV9UWFZfR0VUX1RYX0RDTSh0eHYpO1xuJiM0MztcdGVyc3UxMDZ0ID0gTVQ3OTI1X1RYVl9HRVRfVFhfMTA2VCh0eHYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZGNtKVxuJiM0MztcdFx0cmF0ZSA9IE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfRENNKHJhdGUpO1xuJiM0MztcdGlmIChlcnN1MTA2dClcbiYjNDM7XHRcdHJhdGUgPSBNVDc5MjVfVFhWX1JBVEVfVU5NQVNLXzEwNlQocmF0ZSk7XG4mIzQzO1xuJiM0MztcdGlmICh0eG1vZGUgXHUwMDNjIEFSUkFZX1NJWkUobXQ3OTI1X3R4X21vZGVfc3RyKSlcbiYjNDM7XHRcdG1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JS0yMnMgICVzID0gXCYjMzQ7LCBcJiMzNDsgXCYjMzQ7LCBcJiMzNDtMYXN0IFRYIFJhdGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiByYXRlL01DUyBmaWVsZCAqL1xuJiM0MztcdGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0spXG4mIzQzO1x0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzLCBcJiMzNDssXG4mIzQzO1x0XHRcdCAgIHJhdGUgXHUwMDNjIDQgPyBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGVdIDpcbiYjNDM7XHRcdFx0ICAgKCgocmF0ZSBcdTAwM2U9IDUpIFx1MDAyNlx1MDAyNiAocmF0ZSBcdTAwM2M9IDcpKSA/XG4mIzQzO1x0XHRcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGUgLSA0XSA6XG4mIzQzO1x0XHRcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyWzRdKSk7XG4mIzQzO1x0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSlcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0OywgbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIocmF0ZSkpO1xuJiM0MztcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XG4mIzQzO1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRilcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7TUNTJWQsIFwmIzM0OywgcmF0ZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslcyVkX01DUyVkLCBcJiMzNDssXG4mIzQzO1x0XHRcdCAgIHN0YmMgPyBcJiMzNDtOU1RTXCYjMzQ7IDogXCYjMzQ7TlNTXCYjMzQ7LCBuc3RzLCByYXRlKTtcbiYjNDM7XG4mIzQzO1x0LyogYmFuZHdpZHRoICovXG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslcywgXCYjMzQ7LFxuJiM0MztcdFx0ICAgZnJtb2RlIFx1MDAzYyA1ID8gbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZybW9kZV0gOlxuJiM0MztcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcbiYjNDM7XG4mIzQzO1x0LyogR0kgLyBwcmVhbWJsZSAqL1xuJiM0MztcdGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0spXG4mIzQzO1x0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyVzLCBcJiMzNDssIHJhdGUgXHUwMDNjIDQgPyBcJiMzNDtMUFwmIzM0OyA6IFwmIzM0O1NQXCYjMzQ7KTtcbiYjNDM7XHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuJiM0MztcdFx0OyAvKiBPRkRNIGhhcyBubyBHSS9wcmVhbWJsZSB0byBwcmludCAqL1xuJiM0MztcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XG4mIzQzO1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiB8fFxuJiM0MztcdFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCB8fFxuJiM0MztcdFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1BMUilcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0Oywgc2dpID09IDAgPyBcJiMzNDtMR0lcJiMzNDsgOiBcJiMzNDtTR0lcJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXMsIFwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgc2dpID09IDAgPyBcJiMzNDtTR0lcJiMzNDsgOiAoc2dpID09IDEgPyBcJiMzNDtNR0lcJiMzNDsgOiBcJiMzNDtMR0lcJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0LyogbW9kZSwgRENNLCAxMDZ0LCBTVEJDLCBjb2RpbmcsIFNQRSAqL1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7JXMlcyVzJXMlcyVzJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBtb2RlX3N0cixcbiYjNDM7XHRcdCAgIGRjbSA/IFwmIzM0OywgRENNXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBlcnN1MTA2dCA/IFwmIzM0OywgMTA2dFwmIzM0OyA6IFwmIzM0O1wmIzM0OyxcbiYjNDM7XHRcdCAgIHN0YmMgPyBcJiMzNDssIFNUQkMsIFwmIzM0OyA6IFwmIzM0OywgXCYjMzQ7LCBsZHBjID09IDAgPyBcJiMzNDtCQ0NcJiMzNDsgOiBcJiMzNDtMRFBDXCYjMzQ7LFxuJiM0MztcdFx0ICAgXCYjMzQ7LCBTUEVcJiMzNDssIHNwZSk7XG4mIzQzO1xuJiM0MztcdC8qIGNoaXAgb3V0IFRYIHBvd2VyICh1bml0OiAwLjUgZEJtKSAqL1xuJiM0MztcdHBvc190eHB3ciA9ICh0eHB3ciBcdTAwM2MgMCkgPyAofnR4cHdyICYjNDM7IDEpIDogdHhwd3I7XG4mIzQzO1x0c2VxX3ByaW50ZihzLCBcJiMzNDslLTIycyAgJXMgPSAlYyVkLiUxZCBkQm1cXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgXCYjMzQ7LCBcJiMzNDtDaGlwIE91dCBUWCBQb3dlclwmIzM0OyxcbiYjNDM7XHRcdCAgICh0eHB3ciBcdTAwM2MgMCkgPyAmIzM5Oy0mIzM5OyA6ICYjMzk7JiM0MzsmIzM5OyxcbiYjNDM7XHRcdCAgIChwb3NfdHhwd3IgLyAyKSwgNSAqIChwb3NfdHhwd3IgJSAyKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEd1YXJkIGludGVydmFsIHVzZWQgZm9yIHRoZSBhdXRvLXJhdGUgZW50cmllcywgbWlycm9yIEdlbjRtXG4mIzQzOyAqIGNvbm5hYzN4X2dldF9zZ2lfaW5mb19mcm9tX2Z3KCk6IHBpY2sgdGhlIHBlci1tb2RlL3Blci1CVyBmbGFnLlxuJiM0MzsgKi9cbiYjNDM7dThcbiYjNDM7bXQ3OTI1X3d0YmxfZ2V0X3NnaShjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSwgdTggZmNhcClcbiYjNDM7e1xuJiM0MztcdGJvb2wgaGUgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfU1UgfHxcbiYjNDM7XHRcdCAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX0VSIHx8XG4mIzQzO1x0XHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHIHx8XG4mIzQzO1x0XHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9NVSk7XG4mIzQzO1x0Ym9vbCBlaHQgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX0VSIHx8XG4mIzQzO1x0XHQgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUcgfHxcbiYjNDM7XHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUpO1xuJiM0MztcbiYjNDM7XHRpZiAoZWh0KVxuJiM0MztcdFx0cmV0dXJuIHdyLVx1MDAzZWdpX2VodDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChmY2FwKSB7XG4mIzQzO1x0Y2FzZSBNVDc5MjVfQldfMjA6XG4mIzQzO1x0XHRyZXR1cm4gaGUgPyB3ci1cdTAwM2VnMl9oZSA6IHdyLVx1MDAzZWcyO1xuJiM0MztcdGNhc2UgTVQ3OTI1X0JXXzQwOlxuJiM0MztcdFx0cmV0dXJuIGhlID8gd3ItXHUwMDNlZzRfaGUgOiB3ci1cdTAwM2VnNDtcbiYjNDM7XHRjYXNlIE1UNzkyNV9CV184MDpcbiYjNDM7XHRcdHJldHVybiBoZSA/IHdyLVx1MDAzZWc4X2hlIDogd3ItXHUwMDNlZzg7XG4mIzQzO1x0Y2FzZSBNVDc5MjVfQldfMTYwOlxuJiM0MztcdFx0cmV0dXJuIGhlID8gd3ItXHUwMDNlZzE2X2hlIDogd3ItXHUwMDNlZzE2O1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENvZGluZyB1c2VkIGZvciB0aGUgYXV0by1yYXRlIGVudHJpZXMsIG1pcnJvciBHZW40bVxuJiM0MzsgKiBjb25uYWMzeF93dGJsX2dldF9sZHBjX2luZm9fZnJvbV9mdygpOiAwID0gQkNDLCAxID0gTERQQy5cbiYjNDM7ICovXG4mIzQzO3U4XG4mIzQzO210NzkyNV93dGJsX2dldF9sZHBjKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0eG1vZGUpIHtcbiYjNDM7XHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVg6XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0Y6XG4mIzQzO1x0XHRyZXR1cm4gd3ItXHUwMDNlaHRfbGRwYztcbiYjNDM7XHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfVkhUOlxuJiM0MztcdFx0cmV0dXJuIHdyLVx1MDAzZXZodF9sZHBjO1xuJiM0MztcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9TVTpcbiYjNDM7XHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVI6XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1RSSUc6XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VOlxuJiM0MztcdFx0cmV0dXJuIHdyLVx1MDAzZWhlX2xkcGM7XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUjpcbiYjNDM7XHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUc6XG4mIzQzO1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9NVTpcbiYjNDM7XHRcdHJldHVybiB3ci1cdTAwM2VlaHRfbGRwYztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxuJiM0MztcdFx0XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyAqc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbGVuID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19ldmVudCAqZXZlbnQgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX3JlcSByZXEgPSB7XG4mIzQzO1x0XHQudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NUQSksXG4mIzQzO1x0XHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxuJiM0MztcdFx0Lmxsc19yZWFkX2NsZWFyID0gZmFsc2UsXG4mIzQzO1x0XHQucmVzZXRfY291bnRlciA9IGZhbHNlLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldCA9IG10NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoZGV2LCBcdTAwMjZyZXEuc3RhX3JlY19pZHgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0YXRzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG4mIzQzO1x0XHRcdFx0XHRNQ1VfVU5JX1FVRVJZKEdFVF9TVEFUX0lORk8pLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2V2ZW50ICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShldmVudC1cdTAwM2V0YWcpICE9IFVOSV9DTURfSURfU1RBVElTVElDU19TVEEpIHtcbiYjNDM7XHRcdHJldCA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxlbiA9IGxlMTZfdG9fY3B1KGV2ZW50LVx1MDAzZWxlbik7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKCpldmVudCkgLSBzaXplb2YoZXZlbnQtXHUwMDNlcnN2KSB8fFxuJiM0MztcdCAgICBsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBzaXplb2YoZXZlbnQtXHUwMDNlcnN2KSB8fCAhSVNfQUxJR05FRChsZW4sIDQpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChldmVudC1cdTAwM2VzdGF0cy52ZXJzaW9uICE9IE1UNzkyNV9TVEFfU1RBVFNfVkVSU0lPTikge1xuJiM0MztcdFx0cmV0ID0gLUVQUk9UTztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCEobGUzMl90b19jcHUoZXZlbnQtXHUwMDNlc3RhdHMuZmxhZ3MpIFx1MDAyNiBNVDc5MjVfU1RBX1NUQVRTX1ZBTElEKSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtY3B5KHN0YXRzLCBcdTAwMjZldmVudC1cdTAwM2VzdGF0cywgc2l6ZW9mKCpzdGF0cykpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXQ3OTI1X21jdV9nZXRfbWliX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKmNvdW50ZXJzLCB1OCBjb3VudGVyX251bSxcbiYjNDM7XHRcdFx0ICAgIHU2NCAqdmFsdWVzKVxuJiM0Mzt7XG4mIzQzO1x0dTggKnJlcTtcbiYjNDM7XHR1OCAqdGx2LCAqdGx2X2VuZDtcbiYjNDM7XHR1MTYgcmVxX2xlbjtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfbWliX2hkciAqcmVxX2hkcjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICpyZXFfdGx2O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdGlmICghY291bnRlcnMgfHwgIXZhbHVlcyB8fCAhY291bnRlcl9udW0gfHxcbiYjNDM7XHQgICAgY291bnRlcl9udW0gXHUwMDNlIE1UNzkyNV9NSUJfTUFYX0NOVClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBjbGVhciBvdXRwdXQ7IGNvdW50ZXJzIG5vdCByZXR1cm5lZCBieSBmaXJtd2FyZSBzdGF5IDAgKi9cbiYjNDM7XHRtZW1zZXQodmFsdWVzLCAwLCBjb3VudGVyX251bSAqIHNpemVvZigqdmFsdWVzKSk7XG4mIzQzO1xuJiM0MztcdHJlcV9sZW4gPSBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSAmIzQzO1xuJiM0MztcdFx0ICBjb3VudGVyX251bSAqIHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKTtcbiYjNDM7XG4mIzQzO1x0cmVxID0ga3phbGxvYyhyZXFfbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJlcSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXFfaGRyID0gKHN0cnVjdCBtdDc5MjVfbWliX2hkciAqKXJlcTtcbiYjNDM7XHRyZXFfaGRyLVx1MDAzZWJhbmRfaWR4ID0gYmFuZF9pZHg7XG4mIzQzO1xuJiM0MztcdHJlcV90bHYgPSAoc3RydWN0IG10NzkyNV9taWJfZGF0YSAqKShyZXEgJiM0Mzsgc2l6ZW9mKCpyZXFfaGRyKSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnRlcl9udW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXFfdGx2W2ldLnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfTUlCX0RBVEEpO1xuJiM0MztcdFx0cmVxX3RsdltpXS5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSkpO1xuJiM0MztcdFx0cmVxX3RsdltpXS5jb3VudGVyID0gY3B1X3RvX2xlMzIoY291bnRlcnNbaV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbiYjNDM7XHRcdFx0XHRcdE1DVV9VTklfUVVFUlkoR0VUX01JQl9JTkZPKSwgcmVxLFxuJiM0MztcdFx0XHRcdFx0cmVxX2xlbiwgdHJ1ZSwgXHUwMDI2c2tiKTtcbiYjNDM7XHRrZnJlZShyZXEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcikpIHtcbiYjNDM7XHRcdHJldCA9IC1FTVNHU0laRTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Lyogd2FsayB0aGUgcmV0dXJuZWQgVExWcywgbWF0Y2ggZWFjaCBjb3VudGVyIElEIHRvIHRoZSByZXF1ZXN0ICovXG4mIzQzO1x0dGx2ID0gc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcik7XG4mIzQzO1x0dGx2X2VuZCA9IHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYi1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdHdoaWxlICh0bHYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpIFx1MDAzYz0gdGx2X2VuZCkge1xuJiM0MztcdFx0c3RydWN0IG10NzkyNV9taWJfZGF0YSAqZXZ0X3RsdiA9XG4mIzQzO1x0XHRcdChzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICopdGx2O1xuJiM0MztcdFx0dTE2IHRhZyA9IGxlMTZfdG9fY3B1KGV2dF90bHYtXHUwMDNldGFnKTtcbiYjNDM7XHRcdHUxNiBsZW4gPSBsZTE2X3RvX2NwdShldnRfdGx2LVx1MDAzZWxlbik7XG4mIzQzO1x0XHR1MzIgY291bnRlcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSkgfHxcbiYjNDM7XHRcdCAgICB0bHYgJiM0MzsgbGVuIFx1MDAzZSB0bHZfZW5kKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGFnID09IFVOSV9DTURfTUlCX0RBVEEpIHtcbiYjNDM7XHRcdFx0Y291bnRlciA9IGxlMzJfdG9fY3B1KGV2dF90bHYtXHUwMDNlY291bnRlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoY291bnRlciBcdTAwM2MgTVQ3OTI1X01JQl9DTlRfTUFYX05VTSkge1xuJiM0MztcdFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50ZXJfbnVtOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdFx0aWYgKGNvdW50ZXJzW2ldID09IGNvdW50ZXIpIHtcbiYjNDM7XHRcdFx0XHRcdFx0dmFsdWVzW2ldID1cbiYjNDM7XHRcdFx0XHRcdFx0ICBsZTY0X3RvX2NwdShldnRfdGx2LVx1MDAzZWRhdGEpO1xuJiM0MztcdFx0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR0bHYgJiM0Mzs9IGxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IDA7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyICptdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cih1OCBvZmRtX2lkeClcbiYjNDM7e1xuJiM0MztcdGNoYXIgKiBjb25zdCBvZmRtX3N0cltdID0ge1xuJiM0MztcdFx0XCYjMzQ7Nk1cJiMzNDssIFwmIzM0OzlNXCYjMzQ7LCBcJiMzNDsxMk1cJiMzNDssIFwmIzM0OzE4TVwmIzM0OywgXCYjMzQ7MjRNXCYjMzQ7LCBcJiMzNDszNk1cJiMzNDssIFwmIzM0OzQ4TVwmIzM0OywgXCYjMzQ7NTRNXCYjMzQ7LCBcJiMzNDtOL0FcJiMzNDtcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKG9mZG1faWR4KSB7XG4mIzQzO1x0Y2FzZSAxMTogcmV0dXJuIG9mZG1fc3RyWzBdO1x0LyogNk0gKi9cbiYjNDM7XHRjYXNlIDE1OiByZXR1cm4gb2ZkbV9zdHJbMV07XHQvKiA5TSAqL1xuJiM0MztcdGNhc2UgMTA6IHJldHVybiBvZmRtX3N0clsyXTtcdC8qIDEyTSAqL1xuJiM0MztcdGNhc2UgMTQ6IHJldHVybiBvZmRtX3N0clszXTtcdC8qIDE4TSAqL1xuJiM0MztcdGNhc2UgOTogIHJldHVybiBvZmRtX3N0cls0XTtcdC8qIDI0TSAqL1xuJiM0MztcdGNhc2UgMTM6IHJldHVybiBvZmRtX3N0cls1XTtcdC8qIDM2TSAqL1xuJiM0MztcdGNhc2UgODogIHJldHVybiBvZmRtX3N0cls2XTtcdC8qIDQ4TSAqL1xuJiM0MztcdGNhc2UgMTI6IHJldHVybiBvZmRtX3N0cls3XTtcdC8qIDU0TSAqL1xuJiM0MztcdGRlZmF1bHQ6IHJldHVybiBvZmRtX3N0cls4XTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIG10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZSAtIGZldGNoIHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgZm9yIGEgV0NJRFxuJiM0MzsgKiBAZGV2Olx0ZGV2aWNlXG4mIzQzOyAqIEB3bGFuX2lkeDpcdEhXIFdUQkwgLyBXQ0lEIGluZGV4IChzZWUgbXQ3OTI1X3N0YV9zdGF0cy53dGJsX2lkeClcbiYjNDM7ICogQHJhdGU6XHRvdXQsIGZpbGxlZCB3aXRoIHRoZSBhdXRvLXJhdGUgdGFibGUgc25hcHNob3RcbiYjNDM7ICpcbiYjNDM7ICogTWlycm9yIG9mIEdlbjRtIHdsYW5vaWRHZXRTdGF0V3RibCgpOiBzZW5kIFVOSV9DTURfR0VUX1NUQVRfSU5GTyB3aXRoIHRoZVxuJiM0MzsgKiBXVEJMIHJhdGUgVExWIChjbWQgdGFnIDEwKSBhbmQgcGFyc2UgdGhlIHJlcGx5IChldmVudCB0YWcgMTIpIGludG8gQHJhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0MztpbnQgbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUxNiB3bGFuX2lkeCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqcmF0ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RydWN0IG10NzkyNV93dGJsX3JhdGVfZXZlbnQgKmV2ZW50ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZV9yZXEgcmVxID0ge1xuJiM0MztcdFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMKSxcbiYjNDM7XHRcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksXG4mIzQzO1x0XHQud2xhbl9pZHggPSBjcHVfdG9fbGUxNih3bGFuX2lkeCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG4mIzQzO1x0XHRcdFx0XHRNQ1VfVU5JX1FVRVJZKEdFVF9TVEFUX0lORk8pLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqZXZlbnQpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShldmVudC1cdTAwM2VyYXRlLnRhZykgIT0gTVQ3OTI1X1VOSV9FVkVOVF9TVEFUSVNUSUNTX1dUQkwpIHtcbiYjNDM7XHRcdHJldCA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1lbWNweShyYXRlLCBcdTAwMjZldmVudC1cdTAwM2VyYXRlLCBzaXplb2YoKnJhdGUpKTtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5IC0gcXVlcnkgUlNTSSBhbmQgVFggbGluayBzcGVlZCBmb3IgYSBiYW5kXG4mIzQzOyAqIEBkZXY6XHRkZXZpY2VcbiYjNDM7ICogQGJhbmRfaWR4Olx0YmFuZC9CU1MgaW5kZXggKDAuLjMpXG4mIzQzOyAqIEByc3NpOlx0b3V0LCBtb3ZpbmctYXZlcmFnZSBiZWFjb24gUlNTSSBpbiBkQm0gKG1heSBiZSBOVUxMKVxuJiM0MzsgKiBAdHhfbGlua19zcGVlZF9rYnBzOiBvdXQsIFRYIHJhdGUgaW4ga2JpdC9zIChtYXkgYmUgTlVMTClcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9FTlQgaWYgdGhlIGJhbmQmIzM5O3MgbGluayBxdWFsaXR5IGlzIG5vdCByZWFkeS5cbiYjNDM7ICpcbiYjNDM7ICogT25seSBSU1NJIGFuZCBUWCByYXRlIGNvbWUgZnJvbSBmaXJtd2FyZSBoZXJlOyBmb3IgUlggcmF0ZSByZWFkIHdjaWQtXHUwMDNlcmF0ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4mIzQzO1x0XHRcdFx0czggKnJzc2ksIHUzMiAqdHhfbGlua19zcGVlZF9rYnBzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X2xxX2V2ZW50ICpldmVudDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSAqbHE7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X2xxX3JlcSByZXEgPSB7XG4mIzQzO1x0XHQudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSksXG4mIzQzO1x0XHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChiYW5kX2lkeCBcdTAwM2U9IE1UNzkyNV9MUV9CQU5EX05VTSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuJiM0MztcdFx0XHRcdFx0TUNVX1VOSV9RVUVSWShHRVRfU1RBVF9JTkZPKSwgXHUwMDI2cmVxLFxuJiM0MztcdFx0XHRcdFx0c2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKmV2ZW50KSkge1xuJiM0MztcdFx0cmV0ID0gLUVNU0dTSVpFO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRldmVudCA9IChzdHJ1Y3QgbXQ3OTI1X2xxX2V2ZW50ICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShldmVudC1cdTAwM2V0YWcpICE9IFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkpIHtcbiYjNDM7XHRcdHJldCA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxxID0gXHUwMDI2ZXZlbnQtXHUwMDNlbHFbYmFuZF9pZHhdO1xuJiM0MztcdGlmICghbHEtXHUwMDNlaXNfcmVhZHkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyc3NpKVxuJiM0MztcdFx0KnJzc2kgPSBscS1cdTAwM2Vyc3NpO1xuJiM0MztcbiYjNDM7XHQvKiBmaXJtd2FyZSByZXBvcnRzIFRYIHJhdGUgaW4gNTAwIEtiL3MgdW5pdHMgLVx1MDAzZSBrYml0L3MgKi9cbiYjNDM7XHRpZiAodHhfbGlua19zcGVlZF9rYnBzKVxuJiM0MztcdFx0KnR4X2xpbmtfc3BlZWRfa2JwcyA9IGxlMTZfdG9fY3B1KGxxLVx1MDAzZWxpbmtfc3BlZWQpICogNTAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTcwYjllYjNhYTgwNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaFxuQEAgLTAsMCAmIzQzOzEsMzA5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi9cbiYjNDM7LyogQ29weXJpZ2h0IChDKSAyMDI2IE1lZGlhVGVrIEluYy4gKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19NVDc5MjVfU1RBVFNfSFxuJiM0MzsjZGVmaW5lIF9fTVQ3OTI1X1NUQVRTX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9tdDc2X2Nvbm5hY19tY3UuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0FDX05VTSA0XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTSAyXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNIDE2XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19UWF9RVUFMSVRZX05VTSA0XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYX01PREVfTlVNICAgICAgMTZcbiYjNDM7I2RlZmluZSBNVDc5MjVfVFhfUkFURV9DQ0tfTlVNICA1XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYX1JBVEVfQldfTlVNICAgNlxuJiM0MztcbiYjNDM7LyogSFcgcmF0ZSBjb2RlICgxNi1iaXQpIGZpZWxkIGV4dHJhY3QsIG1pcnJvciBHZW40bSBDT05OQUMzWF9IV19UWF9SQVRFX1RPXyouXG4mIzQzOyAqIFRoZSBhdXRvLXJhdGUgdGFibGUgc3RvcmVzIG9uZSByYXRlIGNvZGUgcGVyIGVudHJ5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19NQ1MoX3gpXHQoKChfeCkgXHUwMDI2IEdFTk1BU0soNSwgMCkpIFx1MDAzZVx1MDAzZSAwKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX01PREUoX3gpXHQoKChfeCkgXHUwMDI2IEdFTk1BU0soOSwgNikpIFx1MDAzZVx1MDAzZSA2KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX05TUyhfeClcdCgoKF94KSBcdTAwMjYgR0VOTUFTSygxMywgMTApKSBcdTAwM2VcdTAwM2UgMTApXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fU1RCQyhfeClcdCgoKF94KSBcdTAwMjYgQklUKDE0KSkgXHUwMDNlXHUwMDNlIDE0KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX0RDTShfeClcdCgoKF94KSBcdTAwMjYgQklUKDQpKSBcdTAwM2VcdTAwM2UgNClcbiYjNDM7I2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT18xMDZUKF94KVx0KCgoX3gpIFx1MDAyNiBCSVQoNSkpIFx1MDAzZVx1MDAzZSA1KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00oX3IpXHQoKHU4KShfcikgXHUwMDI2IDB4ZWYpXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVU5NQVNLXzEwNlQoX3IpXHQoKHU4KShfcikgXHUwMDI2IDB4ZGYpXG4mIzQzO1xuJiM0MzsvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIChtaXJyb3IgR2VuNG1cbiYjNDM7ICogQVVUT19SQVRFX05VTSkuIFJBIGN5Y2xlcyB0aHJvdWdoIHRoZXNlIGFuZCByZXBvcnRzIHdoaWNoIG9uZSBpcyBpbiB1c2VcbiYjNDM7ICogdmlhIHd0YmwtXHUwMDNlcmF0ZV9pZHguXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1UNzkyNV9BVVRPX1JBVEVfTlVNIDhcbiYjNDM7XG4mIzQzOy8qIEZpcm13YXJlIEVWRU5UX1NUQVRJU1RJQ1Mgc3ViLWV2ZW50IHRhZ3MuIFRoZSBXVEJMIHJhdGUgcmVxdWVzdCB1c2VzIGNtZCB0YWdcbiYjNDM7ICogVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgKDEwKSBidXQgdGhlIGZpcm13YXJlIHJlcGxpZXMgd2l0aCBldmVudCB0YWcgMTIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1UNzkyNV9VTklfRVZFTlRfU1RBVElTVElDU19XVEJMIDEyXG4mIzQzO1xuJiM0MzsvKiBDT05OQUMzWCBUWCBWZWN0b3IgQkJQIGxhdGNoIGJpdCBmaWVsZHMgKG1pcnJvciBjbW1fYXNpY19jb25uYWMzeC5oKS5cbiYjNDM7ICogVGhlc2Ugb3BlcmF0ZSBvbiB0aGUgMy1EV09SRCB0eF92ZWN0b3JbYmFuZF0udHh2WzNdIGFycmF5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9SQVRFKF90eHYpXHQoKF90eHYpWzJdIFx1MDAyNiAweDdmKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0xEUEMoX3R4dilcdCgoKF90eHYpWzJdIFx1MDAyNiAoMHgxIFx1MDAzY1x1MDAzYyA3KSkgXHUwMDNlXHUwMDNlIDcpXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyhfdHh2KVx0KCgoX3R4dilbMF0gXHUwMDI2ICgweDMgXHUwMDNjXHUwMDNjIDYpKSBcdTAwM2VcdTAwM2UgNilcbiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9GUk1PREUoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHg3IFx1MDAzY1x1MDAzYyA4KSkgXHUwMDNlXHUwMDNlIDgpXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfTU9ERShfdHh2KVx0KCgoX3R4dilbMF0gXHUwMDI2ICgweGYgXHUwMDNjXHUwMDNjIDEyKSkgXHUwMDNlXHUwMDNlIDEyKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX05TVFMoX3R4dilcdCgoKF90eHYpWzJdIFx1MDAyNiAoMHhmVSBcdTAwM2NcdTAwM2MgMjgpKSBcdTAwM2VcdTAwM2UgMjgpXG4mIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUFdSKF90eHYpXHQoKChfdHh2KVswXSBcdTAwMjYgKDB4ZmYgXHUwMDNjXHUwMDNjIDE2KSkgXHUwMDNlXHUwMDNlIDE2KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NHSShfdHh2KVx0KCgoX3R4dilbMV0gXHUwMDI2ICgweDMgXHUwMDNjXHUwMDNjIDI2KSkgXHUwMDNlXHUwMDNlIDI2KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NQRV9JRFgoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHgxZiBcdTAwM2NcdTAwM2MgMCkpIFx1MDAzZVx1MDAzZSAwKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0RDTShfdHh2KVx0KCgoX3R4dilbMl0gXHUwMDI2ICgweDEgXHUwMDNjXHUwMDNjIDQpKSBcdTAwM2VcdTAwM2UgNClcbiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF8xMDZUKF90eHYpXHQoKChfdHh2KVsyXSBcdTAwMjYgKDB4MSBcdTAwM2NcdTAwM2MgNSkpIFx1MDAzZVx1MDAzZSA1KVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfRENNKF9yKVx0KCh1OCkoX3IpIFx1MDAyNiAweGVmKVxuJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfMTA2VChfcilcdCgodTgpKF9yKSBcdTAwMjYgMHhkZilcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X21vZGVfc3RyW01UNzkyNV9UWF9NT0RFX05VTV07XG4mIzQzO2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltNVDc5MjVfVFhfUkFURV9DQ0tfTlVNXTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbTVQ3OTI1X1RYX1JBVEVfQldfTlVNXTtcbiYjNDM7XG4mIzQzOy8qIFRYIHJhdGUgbW9kZSwgbWlycm9yIEdlbjRtIFRYX1JBVEVfTU9ERV8qIChzZWUgbmljX3JhdGUuaCkuIFVzZWQgdG8gZGVjb2RlXG4mIzQzOyAqIGJvdGggdGhlIFRYIFZlY3RvciBCQlAgbGF0Y2ggYW5kIHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgcmF0ZSBjb2Rlcy5cbiYjNDM7ICovXG4mIzQzO2VudW0gbXQ3OTI1X3R4X3JhdGVfbW9kZSB7XG4mIzQzO1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgPSAwLFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSA9IDEsXG4mIzQzO1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCA9IDIsXG4mIzQzO1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGID0gMyxcbiYjNDM7XHRNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCA9IDQsXG4mIzQzO1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIgPSA1LFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfU1UgPSA4LFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgPSA5LFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfVFJJRyA9IDEwLFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfTVUgPSAxMSxcbiYjNDM7XHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUiA9IDEzLFxuJiM0MztcdE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUcgPSAxNCxcbiYjNDM7XHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9NVSA9IDE1LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSB7XG4mIzQzO1x0VU5JX0NNRF9NSUJfREFUQSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gc3RhdHNfcXVlcnlfbWliX2FycmF5X2luZGV4IHtcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1JYX0ZDU19FUlIgPSAwLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfUlhfRklGT19PVkVSRkxPVyxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1JYX01QRFUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1BGX0RST1AsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9DSEFOTkVMX0lETEUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9NRFJEWSxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfUlhfT0ZETV9MR19NSVhFRF9NRFJEWV9USU1FLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfUF9DQ0FfVElNRSxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1NfQ0NBX1RJTUUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9QX0VEX1RJTUUsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9CQ05fVFgsXG4mIzQzO1x0UVVFUllfTUlCX0NOVF9UWF9CV180ME1IWixcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX1RYX0JXXzgwTUhaLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfVFhfQldfMTYwTUhaLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQlNTMF9CQV9NSVNTLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMixcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX0FNUERVLFxuJiM0MztcdFFVRVJZX01JQl9DTlRfQU1QRFVfTVBEVSxcbiYjNDM7XHRRVUVSWV9NSUJfQ05UX0FNUERVX0FDS0VELFxuJiM0MztcdFFVRVJZX01JQl9DTlRfTUFYX05VTSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gc3RhdHNfdHJ4X2FnZ19yYW5nZSB7XG4mIzQzO1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UwX0lEWCxcbiYjNDM7XHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTFfSURYLFxuJiM0MztcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFMl9JRFgsXG4mIzQzO1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UzX0lEWCxcbiYjNDM7XHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTRfSURYLFxuJiM0MztcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFNV9JRFgsXG4mIzQzO1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U2X0lEWCxcbiYjNDM7XHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTdfSURYLFxuJiM0MztcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdE1UNzkyNV9CV18yMCA9IDAsXG4mIzQzO1x0TVQ3OTI1X0JXXzQwLFxuJiM0MztcdE1UNzkyNV9CV184MCxcbiYjNDM7XHRNVDc5MjVfQldfMTYwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfYWMge1xuJiM0MztcdF9fbGUzMiB0eF9mYWlsO1xuJiM0MztcdF9fbGUzMiB0eF9yZXRyeTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX3R4X3ZlY3RvciB7XG4mIzQzO1x0X19sZTMyIHR4dlszXTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX21pYiB7XG4mIzQzO1x0X19sZTMyIHJ4X21wZHVfY250O1xuJiM0MztcdF9fbGUzMiBmY3NfZXJyb3I7XG4mIzQzO1x0X19sZTMyIHJ4X2ZpZm9fZnVsbDtcbiYjNDM7XHRfX2xlMzIgYW1wZHVfdHhfc2ZfY250O1xuJiM0MztcdF9fbGUzMiBhbXBkdV90eF9hY2tfc2ZfY250O1xuJiM0MztcdF9fbGUzMiB0eF9yYW5nZV9hbXBkdV9jbnRbTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNXTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qIEZpcm13YXJlIEVWRU5UX1NUQV9TVEFUSVNUSUNTIGJvZHkuICovXG4mIzQzO3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzIHtcbiYjNDM7XHR1OCB2ZXJzaW9uO1xuJiM0MztcdHU4IHJzdlszXTtcbiYjNDM7XHRfX2xlMzIgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHU4IHN0YV9pZHg7XG4mIzQzO1x0dTggYnNzX2lkeDtcbiYjNDM7XHR1OCB3dGJsX2lkeDtcbiYjNDM7XHR1OCByc3YxO1xuJiM0MztcbiYjNDM7XHR1OCBtYWNfYWRkcltFVEhfQUxFTl07XG4mIzQzO1x0dTggcGVyO1xuJiM0MztcdHU4IHJjcGk7XG4mIzQzO1xuJiM0MztcdF9fbGUzMiBwaHlfbW9kZTtcbiYjNDM7XHRfX2xlMTYgbGlua19zcGVlZDsgLyogMC41IE1iaXQvcyB1bml0cyAqL1xuJiM0MztcdHU4IGxpbmtfcXVhbGl0eTtcbiYjNDM7XHR1OCBsaW5rX3Jlc2VydmVkO1xuJiM0MztcbiYjNDM7XHRfX2xlMzIgdHhfY291bnQ7XG4mIzQzO1x0X19sZTMyIHR4X2ZhaWxfY291bnQ7XG4mIzQzO1x0X19sZTMyIHR4X2xpZmVfdGltZW91dF9jb3VudDtcbiYjNDM7XHRfX2xlMzIgdHhfZG9uZV9haXJfdGltZTtcbiYjNDM7XHRfX2xlMzIgdHJhbnNtaXRfY291bnQ7XG4mIzQzO1x0X19sZTMyIHRyYW5zbWl0X2ZhaWxfY291bnQ7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2FjIGFjW01UNzkyNV9TVEFfU1RBVFNfQUNfTlVNXTtcbiYjNDM7XG4mIzQzO1x0dTggdGVtcGVyYXR1cmU7XG4mIzQzO1x0dTggc2tpcF9hcjtcbiYjNDM7XHR1OCBhcl90YWJsZV9pZHg7XG4mIzQzO1x0dTggcmF0ZV9lbnRyeV9pZHg7XG4mIzQzO1x0dTggcmF0ZV9lbnRyeV9pZHhfcHJldjtcbiYjNDM7XHR1OCB0eF9zZ2lfZGV0ZWN0X3Bhc3NfY250O1xuJiM0MztcdHU4IGF2ZV9wZXI7XG4mIzQzO1x0dTggcnN2MjtcbiYjNDM7XG4mIzQzO1x0X19sZTMyIGFnZ19yYW5nZV9jdHJsWzJdO1xuJiM0MztcdHU4IHJhbmdlX21vZGU7XG4mIzQzO1x0dTggcnN2M1szXTtcbiYjNDM7XHRfX2xlMzIgYWdnX3JhbmdlX2N0cmxfZXh0WzZdO1xuJiM0MztcbiYjNDM7XHR1OCBhcl9zdGF0ZV9jdXJyO1xuJiM0MztcdHU4IGFyX3N0YXRlX3ByZXY7XG4mIzQzO1x0dTggYXJfYWN0aW9uX3R5cGU7XG4mIzQzO1x0dTggaGlnaGVzdF9yYXRlX2NudDtcbiYjNDM7XHR1OCBsb3dlc3RfcmF0ZV9jbnQ7XG4mIzQzO1x0dTggcnN2NDtcbiYjNDM7XHRfX2xlMTYgdHJhaW5fdXA7XG4mIzQzO1x0X19sZTE2IHRyYWluX2Rvd247XG4mIzQzO1x0dTggcnN2NVsyXTtcbiYjNDM7XHRfX2xlMzIgcmF0ZTFfdHhfY250O1xuJiM0MztcdF9fbGUzMiByYXRlMV9mYWlsX2NudDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfdHhfdmVjdG9yIHR4X3ZlY3RvcltNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNXTtcbiYjNDM7XHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19taWIgbWliW01UNzkyNV9TVEFfU1RBVFNfQkFORF9OVU1dO1xuJiM0MztcbiYjNDM7XHR1OCBpc19mb3JjZV90eF9zdHJlYW07XG4mIzQzO1x0dTggaXNfZm9yY2Vfc2Vfb2ZmO1xuJiM0MztcdF9fbGUxNiByYV9ydW5uaW5nX2NudDtcbiYjNDM7XHR1OCByYV9zdGF0dXM7XG4mIzQzO1x0dTggbWF4X2FtcGR1X2ZhY3RvcjtcbiYjNDM7XHR1OCB0eF9xdWFsaXR5W01UNzkyNV9TVEFfU1RBVFNfVFhfUVVBTElUWV9OVU1dO1xuJiM0MztcdHU4IHR4X3JhdGVfdXBfcGVuYWx0eTtcbiYjNDM7XHR1OCBsb3dfdHJhZmZpY19tb2RlO1xuJiM0MztcdHU4IGxvd190cmFmZmljX2NvdW50O1xuJiM0MztcdHU4IGxvd190cmFmZmljX2Rhc2hib2FyZDtcbiYjNDM7XHR1OCBkeW5hbWljX3NnaV9zdGF0ZTtcbiYjNDM7XHR1OCBkeW5hbWljX3NnaV9zY29yZTtcbiYjNDM7XHR1OCBkeW5hbWljX2J3X3N0YXRlO1xuJiM0MztcdHU4IGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlO1xuJiM0MztcdHU4IHZodF9ub25fc3BfcmF0ZV9zdGF0ZTtcbiYjNDM7XHR1OCByc3Y2WzNdO1xuJiM0MztcdHU4IHJzdjdbMl07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwIHtcbiYjNDM7XHRpbnQgc3RhX3JlY19pZHg7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBGaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgc25hcHNob3QsIG1pcnJvciBHZW40bSBzdHJ1Y3QgVU5JX0VWRU5UX1NUQVRfV1RCTC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGZpcm13YXJlIFJBIG1haW50YWlucyB1cCB0byBNVDc5MjVfQVVUT19SQVRFX05VTSBjYW5kaWRhdGUgcmF0ZXMgaW5cbiYjNDM7ICogcmF0ZV9jb2RlW10uIHJhdGVfaWR4IHRlbGxzIHdoaWNoIGVudHJ5IGlzIGN1cnJlbnRseSBpbiB1c2UsIHNvIGEgZHVtcCBjYW5cbiYjNDM7ICogcG9pbnQgYXQgaXQgd2l0aCBcJiMzNDstLVx1MDAzZVwmIzM0Oy4gZmNhcCBpcyB0aGUgYmFuZHdpZHRoIGNhcGFiaWxpdHkgYW5kIHRoZSBsZHBjL3NnaVxuJiM0MzsgKiBmbGFncyBkZXNjcmliZSB0aGUgcGVyLW1vZGUgY29kaW5nL2d1YXJkLWludGVydmFsIHVzZWQgZm9yIHRob3NlIHJhdGVzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG10NzkyNV93dGJsX3JhdGUge1xuJiM0MztcdF9fbGUxNiB0YWc7XG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHR1OCByeF9yY3BpMDtcbiYjNDM7XHR1OCByeF9yY3BpMTtcbiYjNDM7XHR1OCBjYnJuO1xuJiM0MztcdHU4IGZjYXA7XG4mIzQzO1x0dTggc3BlX2lkeDtcbiYjNDM7XHR1OCBnMjtcdFx0XHQvKiBTR0kgZW5hYmxlZCwgbm9uLUhFLCBCVzIwICovXG4mIzQzO1x0dTggZzQ7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlc0MCAqL1xuJiM0MztcdHU4IGc4O1x0XHRcdC8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXODAgKi9cbiYjNDM7XHR1OCBnMTY7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlcxNjAgKi9cbiYjNDM7XHR1OCBnMl9oZTtcdFx0LyogR0ksIEhFLCBCVzIwICovXG4mIzQzO1x0dTggZzRfaGU7XHRcdC8qIEdJLCBIRSwgQlc0MCAqL1xuJiM0MztcdHU4IGc4X2hlO1x0XHQvKiBHSSwgSEUsIEJXODAgKi9cbiYjNDM7XHR1OCBnMTZfaGU7XHRcdC8qIEdJLCBIRSwgQlcxNjAgKi9cbiYjNDM7XHR1OCBnaV9laHQ7XHRcdC8qIEdJLCBFSFQgKi9cbiYjNDM7XHR1OCBodF9sZHBjO1xuJiM0MztcdHU4IHZodF9sZHBjO1xuJiM0MztcdHU4IGhlX2xkcGM7XG4mIzQzO1x0dTggZWh0X2xkcGM7XG4mIzQzO1x0dTggYWY7XG4mIzQzO1x0dTggcmF0ZV9pZHg7XHRcdC8qIGluZGV4IGludG8gcmF0ZV9jb2RlW10gY3VycmVudGx5IGluIHVzZSAqL1xuJiM0MztcdF9fbGUxNiByYXRlX2NvZGVbTVQ3OTI1X0FVVE9fUkFURV9OVU1dO1xuJiM0MztcdF9fbGUzMiByc3ZbNF07XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7bXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqc3RhX3JlY19pZHgpO1xuJiM0MztcbiYjNDM7dm9pZFxuJiM0MzttdDc5MjVfcHJpbnRfbGFzdF90eF9yYXRlKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3QgX19sZTMyIGxlX3R4dlszXSk7XG4mIzQzO1xuJiM0Mzt1OFxuJiM0MzttdDc5MjVfd3RibF9nZXRfc2dpKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlLCB1OCBmY2FwKTtcbiYjNDM7XG4mIzQzO3U4XG4mIzQzO210NzkyNV93dGJsX2dldF9sZHBjKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlKTtcbiYjNDM7XG4mIzQzO2NoYXIgKm10NzkyNV9od19yYXRlX29mZG1fc3RyKHU4IG9mZG1faWR4KTtcbiYjNDM7XG4mIzQzO2ludCBtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTE2IHdsYW5faWR4LFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICpyYXRlKTtcbiYjNDM7XG4mIzQzO2ludCBtdDc5MnhfbWN1X2dldF9zdGF0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cyk7XG4mIzQzO1xuJiM0MztpbnQgbXQ3OTI1X21jdV9nZXRfbWliX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKmNvdW50ZXJzLCB1OCBjb3VudGVyX251bSxcbiYjNDM7XHRcdFx0ICAgIHU2NCAqdmFsdWVzKTtcbiYjNDM7XG4mIzQzOy8qIEdFVF9TVEFUX0lORk8gKFVOSV9DTURfSURfR0VUX1NUQVRJU1RJQ1MgPSAweDIzKSxcbiYjNDM7ICogc3ViLWNvbW1hbmQgVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19RVUFMSVRZID0gMS5cbiYjNDM7ICpcbiYjNDM7ICogQGJhbmRfaWR4OiAgICAgICAgICAgIGJhbmQvQlNTIGluZGV4ICgwLi4zKVxuJiM0MzsgKiBAcnNzaTogICAgICAgICAgICAgICAgb3V0LCBtb3ZpbmctYXZlcmFnZSBiZWFjb24gUlNTSSAoZEJtKSwgbWF5IGJlIE5VTExcbiYjNDM7ICogQHR4X2xpbmtfc3BlZWRfa2JwczogIG91dCwgVFggbGluayBzcGVlZCBpbiBrYml0L3MsIG1heSBiZSBOVUxMXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PRU5UIGlmIHRoZSBiYW5kJiMzOTtzIGxpbmsgcXVhbGl0eSBpcyBub3QgcmVhZHkuXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IGZpcm13YXJlIHByb3ZpZGVzIG9ubHkgUlNTSSBhbmQgVFggcmF0ZSBoZXJlLiBSWCByYXRlL2JhbmR3aWR0aCBhcmVcbiYjNDM7ICogbm90IGluIHRoaXMgZXZlbnQ7IHJlYWQgd2NpZC1cdTAwM2VyYXRlIGZvciB0aGUgUlggcmF0ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4mIzQzO1x0XHRcdFx0czggKnJzc2ksIHUzMiAqdHhfbGlua19zcGVlZF9rYnBzKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkZWJ1Z2ZzIGVudHJ5IHRvIHF1ZXJ5IGFuZCBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlLiBJdCBpcyBhIGRpYWdub3N0aWMvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZTVkYjViZDFkM2NjZWM0OThiYTIyODQ3MmU3MWI0NjhhYWI0ZGI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMDk6MTI6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaAppbmRleCAwZWRlZGE1NjllOWE1Li5iZjBmMTA1Yzc4NmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgKQEAgLTE0ODMsNiAmIzQzOzE0ODMsMTc5IEBAIGVudW0gewogCU1UX05JQ19DQVBfRU1MX0NBUCA9IDB4MjIsCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19CQVNJQyA9IDAsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkgPSAxLAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfU1RBID0gMiwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0JVR19SRVBPUlQgPSAzLAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfVFhfU1RBVFMgPSA0LAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQUxMX1NUQVRTID0gNSwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0VNTF9TVEFUUyA9IDYsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19SRUdVTEFSX1NUQVRTID0gNywKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0JTU19MSU5LX1FVQUxJVFkgPSA4LAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTUxfQ0hOTF9DT05EID0gOSwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgPSAxMCwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfTEFZRVJfU1RBVFMgPSAxMjgsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19QUERVX0xBVEVOQ1kgPSAxMjksCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19DVVJSRU5UX1RYX1JBVEUgPSAxMzAsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19TRVRfVFhfQklUUkFURV9NT05JVE9SID0gMTMxLAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfR0VUX1BSRURJQ1RfVFhfQklUUkFURSA9IDEzMiwKJiM0MzsJVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9BVFBTX1RZUEVfUkFURV9NT0RFID0gMTMzLAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfU0VUX0JFQUNPTl9SRVBPUlQgPSAxMzQsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19CU1NfQ1VSUkVOVF9UWF9SQVRFID0gMTM1LAomIzQzOwlVTklfQ01EX0lEX1NUQVRJU1RJQ1NfR0VUX0JTU19QUkVESUNUX1RYX0JJVFJBVEUgPSAxMzYsCiYjNDM7CVVOSV9DTURfSURfU1RBVElTVElDU19NQVhfTlVNCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIG10NzkyNV9taWJfY291bnRlciB7CiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9GQ1NfRVJSID0gMCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1cgPSAxLAomIzQzOwlVTklfQ01EX01JQl9DTlRfUlhfTVBEVSA9IDIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCA9IDMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9UT1RBTF9CWVRFID0gNCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX1ZBTElEX0FNUERVX1NGID0gNSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX1ZBTElEX0JZVEUgPSA2LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0hBTk5FTF9JRExFID0gNywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1ZFQ19EUk9QID0gOCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0RFTElNSVRFUl9GQUlMID0gOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1ZFQ19NSVNNQVRDSCA9IDEwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfTURSRFkgPSAxMSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FID0gMTIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUUgPSAxMywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX09GRE1fR1JFRU5fTURSRFlfVElNRSA9IDE0LAomIzQzOwlVTklfQ01EX01JQl9DTlRfUEZfRFJPUCA9IDE1LAomIzQzOwlVTklfQ01EX01JQl9DTlRfTEVOX01JU01BVENIID0gMTYsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9QX0NDQV9USU1FID0gMTcsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX0NDQV9USU1FID0gMTgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUUgPSAxOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1BfRURfVElNRSA9IDIwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkNOX1RYID0gMjEsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9UWF9CV18yME1IWiA9IDIyLAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQldfNDBNSFogPSAyMywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaID0gMjQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9UWF9CV18xNjBNSFogPSAyNSwKJiM0MzsJVU5JX0NNRF9STUFDX0NOVF9PQlNTX0FJUlRJTUUgPSAyNiwKJiM0MzsJVU5JX0NNRF9STUFDX0NOVF9OT05XSUZJX0FJUlRJTUUgPSAyNywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0RVUl9DTlQgPSAyOCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0RVUl9DTlQgPSAyOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JBX0NOVCA9IDMwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfTUFDMlBIWV9UWF9USU1FID0gMzEsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9PVVRfT0ZfUkFOR0VfQ09VTlQgPSAzMiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0lCRl9UWCA9IDMzLAomIzQzOwlVTklfQ01EX01JQl9DTlRfRUJGX1RYID0gMzQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9NVUJGX1RYID0gMzUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CRl9WSFRGQksgPSAzNiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0JGX0hURkJLID0gMzcsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CRl9IRUZCSyA9IDM4LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19CRlBPTExfVFJJID0gMzksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX1RSSSA9IDQwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9SWF9GQktDUUkgPSA0MSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JGRUVfUlhfTkRQID0gNDIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CRl9JQkZfVVBUID0gNDMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CRl9FQkZfVVBUID0gNDQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CRkVFX1NQX0FCT1JUID0gNDUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CRkVFX1RCX0xFTl9FUlIgPSA0NiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JGRUVfVFhGQktfTVVURSA9IDQ3LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9UTUFDX0FCT1JUID0gNDgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX0NQTCA9IDQ5LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9DT0FOVF9CTEtUWCA9IDUwLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkZFRV9GQktfU0VHID0gNTEsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9OQVZfVElNRSA9IDUyLAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMSA9IDUzLAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMCA9IDU0LAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMyA9IDU1LAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMiA9IDU2LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05UID0gNTcsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MxX1JUU19UWF9DTlQgPSA1OCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzJfUlRTX1RYX0NOVCA9IDU5LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTM19SVFNfVFhfQ05UID0gNjAsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX1JUU19SRVRSWSA9IDYxLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMV9SVFNfUkVUUlkgPSA2MiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzJfUlRTX1JFVFJZID0gNjMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MzX1JUU19SRVRSWSA9IDY0LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMF9CQV9NSVNTID0gNjUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MxX0JBX01JU1MgPSA2NiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzJfQkFfTUlTUyA9IDY3LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTM19CQV9NSVNTID0gNjgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0FDS19GQUlMID0gNjksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MxX0FDS19GQUlMID0gNzAsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MyX0FDS19GQUlMID0gNzEsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MzX0FDS19GQUlMID0gNzIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZID0gNzMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MxX0ZSQU1FX1JFVFJZID0gNzQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MyX0ZSQU1FX1JFVFJZID0gNzUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MzX0ZSQU1FX1JFVFJZID0gNzYsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIgPSA3NywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzFfRlJBTUVfUkVUUllfMiA9IDc4LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMl9GUkFNRV9SRVRSWV8yID0gNzksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MzX0ZSQU1FX1JFVFJZXzIgPSA4MCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0ExX1NFQVJDSCA9IDgxLAomIzQzOwlVTklfQ01EX01JQl9DTlRfUlhfRFJPUF9NUERVID0gODIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9VTldBTlRFRCA9IDgzLAomIzQzOwlVTklfQ01EX01JQl9DTlRfUlhfRkNTX09LID0gODQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TVV9UWF9PSyA9IDg1LAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfRlVMTF9CVyA9IDg2LAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQVVUT19CVyA9IDg3LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0NBX1NBTVBMRV9JRExFID0gODgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9DQ0FfU0FNUExFX0FDVElWRSA9IDg5LAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0NBX1RJTUUgPSA5MCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfMjBCV19DQ0FfVElNRSA9IDkxLAomIzQzOwlVTklfQ01EX01JQl9DTlRfU180MEJXX0NDQV9USU1FID0gOTIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TXzgwQldfQ0NBX1RJTUUgPSA5MywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfMTYwQldfQ0NBX1RJTUUgPSA5NCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMF9FRF9USU1FID0gOTUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzFfRURfVElNRSA9IDk2LAomIzQzOwlVTklfQ01EX01JQl9DTlRfU19QMjBCV18yX0VEX1RJTUUgPSA5NywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfM19FRF9USU1FID0gOTgsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzRfRURfVElNRSA9IDk5LAomIzQzOwlVTklfQ01EX01JQl9DTlRfU19QMjBCV181X0VEX1RJTUUgPSAxMDAsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzZfRURfVElNRSA9IDEwMSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfN19FRF9USU1FID0gMTAyLAomIzQzOwlVTklfQ01EX01JQl9DTlRfU19QMjBCV184X0VEX1RJTUUgPSAxMDMsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzlfRURfVElNRSA9IDEwNCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTBfRURfVElNRSA9IDEwNSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTFfRURfVElNRSA9IDEwNiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTJfRURfVElNRSA9IDEwNywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTNfRURfVElNRSA9IDEwOCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTRfRURfVElNRSA9IDEwOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTVfRURfVElNRSA9IDExMCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0JXXzMyME1IWiA9IDExMSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0RETE1UX1JORzAgPSAxMTIsIC8qIFJuZzB+Um5nNCAxMTJ+MTE2ICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzMgPSAxMTcsIC8qIDExN34xMjAgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfVFggPSAxMjEsIC8qIDEyMX4xMjQgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfVFhfREFUQSA9IDEyNSwgLyogMTI1fjEyOCAqLwomIzQzOwlVTklfQ01EX01JQl9DTlRfQlNTMF9UWF9CWVRFID0gMTI5LCAvKiAxMjl+MTMyICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9PS19CU1MwID0gMTMzLCAvKiAxMzN+MTM2ICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CWVRFX0JTUzAgPSAxMzcsIC8qIDEzN34xNDAgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0RBVEFfQlNTMCA9IDE0MSwgLyogMTQxfjE0NCAqLwomIzQzOwlVTklfQ01EX01JQl9DTlRfTUJTUzBfVFhfT0sgPSAxNDUsIC8qIDE0NX4xNjAgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX01CU1MwX1RYX0JZVEUgPSAxNjEsIC8qIDE2MX4xNzYgKi8KJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX09LX01CU1MwID0gMTc3LCAvKiAxNzd+MTkyICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9CWVRFX01CU1MwID0gMTkzLCAvKiAxOTN+MjA4ICovCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVSA9IDIwOSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0FNUERVX01QRFUgPSAyMTAsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVV9BQ0tFRCA9IDIxMSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX01BWF9OVU0KJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gRU5VTV9VTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBRyB7CiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JBU0lDID0gMCwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19RVUFMSVRZID0gMSwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfU1RBID0gMiwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlVHX1JFUE9SVCA9IDMsCiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0VNTF9TVEFUUyA9IDYsCiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1JFR1VMQVJfU1RBVFMgPSA3LAomIzQzOwlVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CU1NfTElOS19RVUFMSVRZID0gOCwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfR0VUX01MX0NITkxfQ09ORCA9IDksCiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1NUQVRfV1RCTCA9IDEwLAomIzQzOwlVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19MSU5LX0xBWUVSX1NUQVRTID0gMHg4MCwKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfUFBEVV9MQVRFTkNZLAomIzQzOwlVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19DVVJSRU5UX1RYX1JBVEUsCiYjNDM7CVVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JFQUNPTl9SRVBPUlQgPSAweDg2LAomIzQzOwlVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CU1NfQ1VSUkVOVF9UWF9SQVRFID0gMHg4NywKJiM0MzsJVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX1BSRURfVFhfQklUUkFURSA9IDB4ODgsCiYjNDM7fTsKJiM0MzsKICNkZWZpbmUgVU5JX1dPV19ERVRFQ1RfVFlQRV9NQUdJQwkJQklUKDApCiAjZGVmaW5lIFVOSV9XT1dfREVURUNUX1RZUEVfQU5ZCQkJQklUKDEpCiAjZGVmaW5lIFVOSV9XT1dfREVURUNUX1RZUEVfRElTQ09OTkVDVAkJQklUKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlCmluZGV4IGY5ZGNjMGJiYTM5M2MuLjM4NjNhODliODk3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlCkBAIC00LDcgJiM0Mzs0LDcgQEAgb2JqLSQoQ09ORklHX01UNzkyNV9DT01NT04pICYjNDM7PSBtdDc5MjUtY29tbW9uLm8KIG9iai0kKENPTkZJR19NVDc5MjVFKSAmIzQzOz0gbXQ3OTI1ZS5vCiBvYmotJChDT05GSUdfTVQ3OTI1VSkgJiM0Mzs9IG10NzkyNXUubwogCi1tdDc5MjUtY29tbW9uLXkgOj0gbWFjLm8gbWN1Lm8gcmVnZC5vIG1haW4ubyBpbml0Lm8gZGVidWdmcy5vIG5hbi5vCiYjNDM7bXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ubyBzdGF0cy5vCiBtdDc5MjUtY29tbW9uLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpICYjNDM7PSB0ZXN0bW9kZS5vCiBtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3UubwogbXQ3OTI1dS15IDo9IHVzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMKaW5kZXggZDAxZmY0OWRlNDdhZi4uN2E0MGQ1YWM0N2RhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuYwpAQCAtMSw4ICYjNDM7MSwxMSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhcgogLyogQ29weXJpZ2h0IChDKSAyMDIzIE1lZGlhVGVrIEluYy4gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYXRoNjQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7bXQ3OTI1LmgmIzM0OwogI2luY2x1ZGUgJiMzNDttY3UuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzdGF0cy5oJiMzNDsKIAogc3RhdGljIGludAogbXQ3OTI1X3JlZ19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKQEAgLTI4Niw2ICYjNDM7Mjg5LDM0NiBAQCBzdGF0aWMgaW50IG10NzkyNV9jaGlwX3Jlc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiAKIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgJiMzNDslbGxkXG4mIzM0Oyk7CiAKJiM0MztzdGF0aWMgY29uc3QgdTMyIHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVyc1tdID0gewomIzQzOwlVTklfQ01EX01JQl9DTlRfUlhfRkNTX0VSUiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1csCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9NUERVLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9QRl9EUk9QLAomIzQzOwlVTklfQ01EX01JQl9DTlRfTEVOX01JU01BVENILAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0hBTk5FTF9JRExFLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FLAomIzQzOwlVTklfQ01EX01JQl9DTlRfTURSRFksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1JYX09GRE1fR1JFRU5fTURSRFlfVElNRSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1BfQ0NBX1RJTUUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9TX0NDQV9USU1FLAomIzQzOwlVTklfQ01EX01JQl9DTlRfUF9FRF9USU1FLAomIzQzOwlVTklfQ01EX01JQl9DTlRfQkNOX1RYLAomIzQzOwlVTklfQ01EX01JQl9DTlRfVFhfQldfNDBNSFosCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9UWF9CV184ME1IWiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX1RYX0JXXzE2ME1IWiwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfQkFfTUlTUywKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVCwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUlksCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9CU1MwX1JUU19SRVRSWSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0JTUzBfQUNLX0ZBSUwsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVSwKJiM0MzsJVU5JX0NNRF9NSUJfQ05UX0FNUERVX01QRFUsCiYjNDM7CVVOSV9DTURfTUlCX0NOVF9BTVBEVV9BQ0tFRCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIER1bXAgdGhlIHdob2xlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSBhbmQgbWFyayB0aGUgZW50cnkgY3VycmVudGx5IGluIHVzZQomIzQzOyAqIHdpdGggJiMzNDstLSZndDsmIzM0OwomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7bXQ3OTI1X2R1bXBfYXV0b19yYXRlX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqcywKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyKQomIzQzO3sKJiM0MzsJdTggZmNhcCA9IHdyLSZndDtmY2FwOwomIzQzOwl1OCByYXRlX2lkeCA9IHdyLSZndDtyYXRlX2lkeDsKJiM0MzsJdTggY2JybiA9IHdyLSZndDtjYnJuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBDdXIgUmF0ZSBJbmRleCA9ICV1XG4mIzM0OywgJiMzNDsgJiMzNDssIHJhdGVfaWR4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1UNzkyNV9BVVRPX1JBVEVfTlVNOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTE2IHJhdGVfY29kZSA9IGxlMTZfdG9fY3B1KHdyLSZndDtyYXRlX2NvZGVbaV0pOwomIzQzOwkJdTggdHhtb2RlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTU9ERShyYXRlX2NvZGUpOwomIzQzOwkJdTggcmF0ZSA9IE1UNzkyNV9IV19SQVRFX1RPX01DUyhyYXRlX2NvZGUpOwomIzQzOwkJdTggbnN0cyA9IE1UNzkyNV9IV19SQVRFX1RPX05TUyhyYXRlX2NvZGUpICYjNDM7IDE7CiYjNDM7CQl1OCBzdGJjID0gTVQ3OTI1X0hXX1JBVEVfVE9fU1RCQyhyYXRlX2NvZGUpOwomIzQzOwkJdTggZGNtID0gTVQ3OTI1X0hXX1JBVEVfVE9fRENNKHJhdGVfY29kZSk7CiYjNDM7CQl1OCBlcnN1MTA2dCA9IE1UNzkyNV9IV19SQVRFX1RPXzEwNlQocmF0ZV9jb2RlKTsKJiM0MzsJCXU4IHNnaSA9IG10NzkyNV93dGJsX2dldF9zZ2kod3IsIHR4bW9kZSwgZmNhcCk7CiYjNDM7CQl1OCBsZHBjID0gbXQ3OTI1X3d0YmxfZ2V0X2xkcGMod3IsIHR4bW9kZSk7CiYjNDM7CQljb25zdCBjaGFyICptb2RlX3N0ciA9ICYjMzQ7Ti9BJiMzNDs7CiYjNDM7CiYjNDM7CQlpZiAoZGNtKQomIzQzOwkJCXJhdGUgPSBNVDc5MjVfSFdfUkFURV9VTk1BU0tfRENNKHJhdGUpOwomIzQzOwkJaWYgKGVyc3UxMDZ0KQomIzQzOwkJCXJhdGUgPSBNVDc5MjVfSFdfUkFURV9VTk1BU0tfMTA2VChyYXRlKTsKJiM0MzsKJiM0MzsJCWlmICh0eG1vZGUgJmx0OyBBUlJBWV9TSVpFKG10NzkyNV90eF9tb2RlX3N0cikpCiYjNDM7CQkJbW9kZV9zdHIgPSBtdDc5MjVfdHhfbW9kZV9zdHJbdHhtb2RlXTsKJiM0MzsKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDtSYXRlIGluZGV4WyVkXSAgICAlcyYjMzQ7LCBpLAomIzQzOwkJCSAgIHJhdGVfaWR4ID09IGkgPyAmIzM0Oy0tJmd0OyAmIzM0OyA6ICYjMzQ7ICAgICYjMzQ7KTsKJiM0MzsKJiM0MzsJCS8qIHJhdGUvTUNTIGZpZWxkICovCiYjNDM7CQlpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKQomIzQzOwkJCXNlcV9wcmludGYocywgJiMzNDslcywgJiMzNDssCiYjNDM7CQkJCSAgIG10NzkyNV90eF9yYXRlX2Nja19zdHJbcmF0ZSAmYW1wOyAweDNdKTsKJiM0MzsJCWVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pCiYjNDM7CQkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywgbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIocmF0ZSkpOwomIzQzOwkJZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHwKJiM0MzsJCQkgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRikKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7TUNTJWQsICYjMzQ7LCByYXRlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMlZF9NQ1MlZCwgJiMzNDssCiYjNDM7CQkJCSAgIHN0YmMgPyAmIzM0O05TVFMmIzM0OyA6ICYjMzQ7TlNTJiMzNDssIG5zdHMsIHJhdGUpOwomIzQzOwomIzQzOwkJLyogYmFuZHdpZHRoOiBtaXJyb3IgdGhlIENDSy9PRkRNIC0mZ3Q7IEJXMjAgYW5kIGNicm4gaGFuZGxpbmcgKi8KJiM0MzsJCWlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHwKJiM0MzsJCSAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKQomIzQzOwkJCXNlcV9wcmludGYocywgJiMzNDslcywgJiMzNDssIG10NzkyNV90eF9yYXRlX2J3X3N0clswXSk7CiYjNDM7CQllbHNlIGlmIChpICZndDsgY2JybikKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LAomIzQzOwkJCQkgICBmY2FwICZsdDsgNSA/CiYjNDM7CQkJCSAgIChmY2FwICZndDsgTVQ3OTI1X0JXXzIwID8KJiM0MzsJCQkJICAgIG10NzkyNV90eF9yYXRlX2J3X3N0cltmY2FwIC0gMV0gOgomIzQzOwkJCQkgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXBdKSA6CiYjNDM7CQkJCSAgIG10NzkyNV90eF9yYXRlX2J3X3N0cls1XSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywKJiM0MzsJCQkJICAgZmNhcCAmbHQ7IDUgPyBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0gOgomIzQzOwkJCQkgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbNV0pOwomIzQzOwomIzQzOwkJLyogR0kgLyBwcmVhbWJsZSAqLwomIzQzOwkJaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSykKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LCByYXRlICZsdDsgNCA/ICYjMzQ7TFAmIzM0OyA6ICYjMzQ7U1AmIzM0Oyk7CiYjNDM7CQllbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKQomIzQzOwkJCTsgLyogT0ZETSBoYXMgbm8gR0kvcHJlYW1ibGUgdG8gcHJpbnQgKi8KJiM0MzsJCWVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8CiYjNDM7CQkJIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YgfHwKJiM0MzsJCQkgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfVkhUIHx8CiYjNDM7CQkJIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1BMUikKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LCBzZ2kgPT0gMCA/ICYjMzQ7TEdJJiMzNDsgOiAmIzM0O1NHSSYjMzQ7KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LAomIzQzOwkJCQkgICBzZ2kgPT0gMCA/ICYjMzQ7U0dJJiMzNDsgOgomIzQzOwkJCQkgICAoc2dpID09IDEgPyAmIzM0O01HSSYjMzQ7IDogJiMzNDtMR0kmIzM0OykpOwomIzQzOwomIzQzOwkJLyogbW9kZSwgRENNLCAxMDZ0LCBTVEJDLCBjb2RpbmcgKi8KJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslcyVzJXMlcyVzXG4mIzM0OywKJiM0MzsJCQkgICBtb2RlX3N0ciwKJiM0MzsJCQkgICBkY20gPyAmIzM0OywgRENNJiMzNDsgOiAmIzM0OyYjMzQ7LCBlcnN1MTA2dCA/ICYjMzQ7LCAxMDZ0JiMzNDsgOiAmIzM0OyYjMzQ7LAomIzQzOwkJCSAgIHN0YmMgPyAmIzM0OywgU1RCQywgJiMzNDsgOiAmIzM0OywgJiMzNDssCiYjNDM7CQkJICAgKGxkcGMgPT0gMCB8fAomIzQzOwkJCSAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHwKJiM0MzsJCQkgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSkgPwomIzQzOwkJCSAgICYjMzQ7QkNDJiMzNDsgOiAmIzM0O0xEUEMmIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtdDc5Mnhfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJczggcnNzaSA9IDA7CiYjNDM7CXU4IGJhbmRfaWR4ID0gMDsKJiM0MzsJYm9vbCB3dGJsX3JhdGVfdmFsaWQgPSBmYWxzZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCBpID0gMDsKJiM0MzsJdTMyIHN0YXRzX3ZhbHVlID0gMDsKJiM0MzsJdTMyIHR4X2xpbmtfc3BlZWRfa2JwcyA9IDA7CiYjNDM7CXU2NCB0eF90b3RhbCA9IDA7CiYjNDM7CXU2NCB0eF9mYWlsID0gMDsKJiM0MzsJdTY0IHR4X3BlciA9IDA7CiYjNDM7CXUzMiB0eF9wZXJfcmVtID0gMDsKJiM0MzsJLyogVU5JX0NNRF9NSUJfREFUQSAqLwomIzQzOwl1NjQgbWliX3ZhbHVlc1tBUlJBWV9TSVpFKHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyldOwomIzQzOwlzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHMtJmd0O3ByaXZhdGUpOwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSB3dGJsX3JhdGU7CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cyA9IE5VTEw7CiYjNDM7CiYjNDM7CWJhbmRfaWR4ID0gZGV2LSZndDttcGh5LmJhbmRfaWR4OwomIzQzOwomIzQzOwkgc3RhdHMgPSBremFsbG9jKHNpemVvZigqc3RhdHMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFzdGF0cykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkvKiBHZXQgU1RBX1NUQVRTICovCiYjNDM7CW10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7CiYjNDM7CXJldCA9IG10NzkyeF9tY3VfZ2V0X3N0YXQoZGV2LCBzdGF0cyk7CiYjNDM7CW10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogR2V0IE1JQl9TVEFUUyAqLwomIzQzOwltdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpOwomIzQzOwlyZXQgPSBtdDc5MjVfbWN1X2dldF9taWJfaW5mbyhkZXYsIGJhbmRfaWR4LCBzdGF0c19xdWVyeV9taWJfY291bnRlcnMsCiYjNDM7CQkJCSAgICAgIEFSUkFZX1NJWkUoc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzKSwgbWliX3ZhbHVlcyk7CiYjNDM7CW10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogR2V0IExpbmtfU3BlZWQgYW5kIFJTU0kgKi8KJiM0MzsJbXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTsKJiM0MzsJcmV0ID0gbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5KGRldiwgc3RhdHMtJmd0O2Jzc19pZHgsICZhbXA7cnNzaSwgJmFtcDt0eF9saW5rX3NwZWVkX2ticHMpOwomIzQzOwltdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIEdldCB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIChiZXN0IGVmZm9ydDsgZG8gbm90IGFib3J0IHRoZQomIzQzOwkgKiB3aG9sZSBzdGF0cyBkdW1wIGlmIHRoZSBXVEJMIHF1ZXJ5IGlzIG5vdCBhdmFpbGFibGUpLgomIzQzOwkgKi8KJiM0MzsJbXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTsKJiM0MzsJaWYgKCFtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUoZGV2LCBzdGF0cy0mZ3Q7d3RibF9pZHgsICZhbXA7d3RibF9yYXRlKSkKJiM0MzsJCXd0YmxfcmF0ZV92YWxpZCA9IHRydWU7CiYjNDM7CW10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7CiYjNDM7CiYjNDM7CS8qIFByaW50IFNUQV9TVEFUUyBpbmZvICovCiYjNDM7CXNlcV9wcmludGYocywgJiMzNDsoU1RBKSBjb25uZWN0ZWQgQVAgTUFDIEFkZHJlc3MgPSAlcE1cbiYjMzQ7LCBzdGF0cy0mZ3Q7bWFjX2FkZHIpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEJzc0lkeCA9IFsldV1cbiYjMzQ7LCAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2Jzc19pZHgpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFN0YVJlY0lkeCA9IFsldV1cbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDtzdGFfaWR4KTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBSU1NJID0gJWRcbiYjMzQ7LCAmIzM0OyAmIzM0OywgcnNzaSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgTGlua19TcGVlZCA9ICV1IChrYml0L3MpXG4mIzM0OywgJiMzNDsgJiMzNDssIHR4X2xpbmtfc3BlZWRfa2Jwcyk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgdGVtcGVyYXR1cmUgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O3RlbXBlcmF0dXJlKTsKJiM0MzsKJiM0MzsJc3RhdHNfdmFsdWUgPSBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7dHJhbnNtaXRfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtJmd0O3RyYW5zbWl0X2ZhaWxfY291bnQpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IHN1Y2Nlc3MgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHNfdmFsdWUpOwomIzQzOwomIzQzOwlzdGF0c192YWx1ZSA9IGxlMzJfdG9fY3B1KHN0YXRzLSZndDt0eF9mYWlsX2NvdW50KSAtIGxlMzJfdG9fY3B1KHN0YXRzLSZndDt0eF9saWZlX3RpbWVvdXRfY291bnQpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IGZhaWwgdG8gUmN2IEFDSyBhZnRlciByZXRyeSA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBzdGF0c192YWx1ZSk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUnggTXBkdSA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7bWliW2JhbmRfaWR4XS5yeF9tcGR1X2NudCkpOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4IEZjcyBFcnJvciA9ICV1IChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtJmd0O21pYltiYW5kX2lkeF0uZmNzX2Vycm9yKSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUnggRklGTyBmdWxsID0gJXUgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7bWliW2JhbmRfaWR4XS5yeF9maWZvX2Z1bGwpKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBUUlhfQUdHX1JBTkdFWyVkXSA9ICV1IChQUERVKVxuJiMzNDssCiYjNDM7CQkJICAgJiMzNDsgJiMzNDssIGksIGxlMzJfdG9fY3B1KHN0YXRzLSZndDttaWJbYmFuZF9pZHhdLnR4X3JhbmdlX2FtcGR1X2NudFtpXSkpOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCA9ICV1IChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbGUzMl90b19jcHUoc3RhdHMtJmd0O21pYltiYW5kX2lkeF0uYW1wZHVfdHhfc2ZfY250KSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgTVBEVXMgaW4gQU1QRFVzIHRyYW5zbWl0dGVkIHdpdGggQUNLIHJlcGx5ID0gJXUgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7bWliW2JhbmRfaWR4XS5hbXBkdV90eF9hY2tfc2ZfY250KSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgcmF0ZTFfdHhfY250ID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIGxlMzJfdG9fY3B1KHN0YXRzLSZndDtyYXRlMV90eF9jbnQpKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICByYXRlMV9mYWlsX2NudCA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTMyX3RvX2NwdShzdGF0cy0mZ3Q7cmF0ZTFfZmFpbF9jbnQpKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICB0cmFpbl91cCA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBsZTE2X3RvX2NwdShzdGF0cy0mZ3Q7dHJhaW5fdXApKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICB0cmFpbl9kb3duID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIGxlMTZfdG9fY3B1KHN0YXRzLSZndDt0cmFpbl9kb3duKSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgaXNfZm9yY2VfdHhfc3RyZWFtID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDtpc19mb3JjZV90eF9zdHJlYW0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIGlzX2ZvcmNlX3NlX29mZiA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBzdGF0cy0mZ3Q7aXNfZm9yY2Vfc2Vfb2ZmKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBtYXhfYW1wZHVfZmFjdG9yID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDttYXhfYW1wZHVfZmFjdG9yKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICB0eF9yYXRlX3VwX3BlbmFsdHkgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O3R4X3JhdGVfdXBfcGVuYWx0eSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgbG93X3RyYWZmaWNfbW9kZSA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBzdGF0cy0mZ3Q7bG93X3RyYWZmaWNfbW9kZSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgbG93X3RyYWZmaWNfY291bnQgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2xvd190cmFmZmljX2NvdW50KTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBsb3dfdHJhZmZpY19kYXNoYm9hcmQgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2xvd190cmFmZmljX2Rhc2hib2FyZCk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgZHluYW1pY19zZ2lfc3RhdGUgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2R5bmFtaWNfc2dpX3N0YXRlKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBkeW5hbWljX3NnaV9zY29yZSA9ICV1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBzdGF0cy0mZ3Q7ZHluYW1pY19zZ2lfc2NvcmUpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIGR5bmFtaWNfYndfc3RhdGUgPSAldVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0Oywgc3RhdHMtJmd0O2R5bmFtaWNfYndfc3RhdGUpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDtkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgdmh0X25vbl9zcF9yYXRlX3N0YXRlID0gJXVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIHN0YXRzLSZndDt2aHRfbm9uX3NwX3JhdGVfc3RhdGUpOwomIzQzOwomIzQzOwkvKiBEZWNvZGUgdGhlIFRYIFZlY3RvciBCQlAgbGF0Y2ggdG8gc2hvdyB0aGUgY3VycmVudCBUWCBNQ1MgcmF0ZSAqLwomIzQzOwlpZiAoYmFuZF9pZHggJmx0OyBNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNKQomIzQzOwkJbXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZShzLCBzdGF0cy0mZ3Q7dHhfdmVjdG9yW2JhbmRfaWR4XS50eHYpOwomIzQzOwomIzQzOwkvKiBEdW1wIHRoZSB3aG9sZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgYW5kIG1hcmsgdGhlIGVudHJ5IGN1cnJlbnRseSAqLwomIzQzOwlpZiAod3RibF9yYXRlX3ZhbGlkKQomIzQzOwkJbXQ3OTI1X2R1bXBfYXV0b19yYXRlX3RhYmxlKHMsICZhbXA7d3RibF9yYXRlKTsKJiM0MzsKJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbm1pYiBzdGF0ZTpcbiYjMzQ7KTsKJiM0MzsJLyogPT09UnggUmVsYXRlZCBDb3VudGVycz09PSAqLwomIzQzOwlzZXFfcHV0cyhzLCAmIzM0Oz09PSBSeCBSZWxhdGVkIENvdW50ZXJzID09PVxuJiMzNDspOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4IHdpdGggQ1JDID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9GQ1NfRVJSXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUnggTXBkdSA9ICVsbHUgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfTVBEVV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4IEFNcGR1ID0gJWxsdSAoUFBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVF0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4IFBGIERyb3AgPSAlbGx1IChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1BGX0RST1BdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBSeCBMZW4gTWlzbWF0Y2ggPSAlbGx1IChQUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0xFTl9NSVNNQVRDSF0pOwomIzQzOwomIzQzOwkvKiA9PT1QaHkvVGltaW5nIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi8KJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbj09PSBQaHkvVGltaW5nIFJlbGF0ZWQgQ291bnRlcnMgPT09XG4mIzM0Oyk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgQ2hhbm5lbElkbGVDbnQgPSAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgQ0NBX05BVl9UeF9UaW1lID0gJWxsdVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0NDQV9OQVZfVFhfVElNRV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFJ4X01EUkRZX0NOVCA9ICVsbHUgKFBQRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfTURSRFldKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBDQ0tfTURSRFkgPSAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUVdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBPRkRNX01EUkRZID0gJWxsdVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIE9GRE1fR1JFRU5fTURSRFkgPSAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUHJpbSBDQ0EgVGltZSA9ICVsbHVcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0NDQV9USU1FXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgU2VjIENDQSBUaW1lID0gJWxsdVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1NfQ0NBX1RJTUVdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBQcmltIEVEIFRpbWUgPSAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUF9FRF9USU1FXSk7CiYjNDM7CiYjNDM7CS8qID09PVR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYyk9PT0gKi8KJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbj09PSBUeCBSZWxhdGVkIENvdW50ZXJzKEdlbmVyaWMpID09PVxuJiMzNDspOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEJlYWNvblR4Q250ID0gJWxsdVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JDTl9UWF0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IDQwTUh6IENudCA9ICVsbHUgIChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1RYX0JXXzQwTUhaXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgVHggODBNSHogQ250ID0gJWxsdSAgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfODBNSFpdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBUeCAxNjBNSHogQ250ID0gJWxsdSAgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfMTYwTUhaXSk7CiYjNDM7CiYjNDM7CS8qID09PUJTU0lEWzBdIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi8KJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbj09PSBCU1NJRFswXSBSZWxhdGVkIENvdW50ZXJzID09PVxuJiMzNDspOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEJBIE1pc3MgQ250ID0gJWxsdSAgKFBQRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9CQV9NSVNTXSk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgUlRTIFR4IENudCA9ICVsbHUgIChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVF0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEZyYW1lIFJldHJ5IENudCA9ICVsbHUgKE1QRFUpXG4mIzM0OywKJiM0MzsJCSAgICYjMzQ7ICYjMzQ7LCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEZyYW1lIFJldHJ5IDIgQ250ID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzJdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBSVFMgUmV0cnkgQ250ID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX1JUU19SRVRSWV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEFjayBGYWlsZWQgQ250ID0gJWxsdSAoUFBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0FDS19GQUlMXSk7CiYjNDM7CiYjNDM7CS8qID09PUFNUERVIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi8KJiM0MzsJc2VxX3B1dHMocywgJiMzNDtcbj09PSBBTVBEVSBSZWxhdGVkIENvdW50ZXJzID09PVxuJiMzNDspOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IEFNUERVX1BrdF9DbnQgPSAlbGx1ICAoUFBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV0pOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIFR4IEFNUERVX01QRFVfUGt0X0NudCA9ICVsbHUgIChNUERVKVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0FNUERVX01QRFVdKTsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICBBTVBEVSBUeCBzdWNjZXNzID0gJWxsdSAoTVBEVSlcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDsgJiMzNDssIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF0pOwomIzQzOwomIzQzOwl0eF90b3RhbCA9IG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVXTsKJiM0MzsJdHhfZmFpbCA9ICBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV0gLSBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfQUNLRURdOwomIzQzOwl0eF9wZXIgPSB0eF90b3RhbCA9PSAwID8gMCA6IGRpdjY0X3U2NCgxMDAwICogdHhfZmFpbCwgdHhfdG90YWwpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7JS0yMnMgIEFNUERVIFR4IGZhaWwgY291bnQgICA9ICVsbHUgIChNUERVKSwgUEVSPSVsbHUuJTFsbHUlJVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywKJiM0MzsJCSAgIHR4X2ZhaWwsCiYjNDM7CQkgICBkaXZfdTY0X3JlbSh0eF9wZXIsIDEwLCAmYW1wO3R4X3Blcl9yZW0pLCAodTY0KXR4X3Blcl9yZW0pOwomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUoc3RhdHMpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGlyOwpAQCAtMzEzLDUgJiM0Mzs2NTYsOCBAQCBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KQogCQkJCSAgICBtdDc5MnhfcG1fc3RhdHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtkZWVwLXNsZWVwJiMzNDssIDA2MDAsIGRpciwgZGV2LCAmYW1wO2ZvcHNfZHMpOwogCiYjNDM7CWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtJmd0O210NzYuZGV2LCAmIzM0O3N0YXRzJiMzNDssIGRpciwKJiM0MzsJCQkJICAgIG10NzkyeF9zdGF0cyk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45YTQ3OTUzMDYyYmMzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuYwpAQCAtMCwwICYjNDM7MSw1ODUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyCiYjNDM7LyogQ29weXJpZ2h0IChDKSAyMDI2IE1lZGlhVGVrIEluYy4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O210NzkyNS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O21jdS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O21hYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3N0YXRzLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19WRVJTSU9OIDEKJiM0MzsjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfVkFMSUQgMVUKJiM0MzsKJiM0MzsjZGVmaW5lIE1UNzkyNV9NSUJfTUFYX0NOVAkJCTMyCiYjNDM7I2RlZmluZSBNVDc5MjVfTUlCX0NOVF9NQVhfTlVNCQk1MTIgIC8qIGZpcm13YXJlIFVOSV9DTURfTUlCX0NOVF9NQVhfTlVNIHVwcGVyIGJvdW5kICovCiYjNDM7CiYjNDM7I2RlZmluZSBNVDc5MjVfTFFfQkFORF9OVU0JNAkJCS8qIExpbmsgcXVhbGl0eSBiYW5kICovCiYjNDM7CiYjNDM7Y29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9tb2RlX3N0cltdID0gewomIzQzOwkmIzM0O0NDSyYjMzQ7LCAmIzM0O09GRE0mIzM0OywgJiMzNDtNTSYjMzQ7LCAmIzM0O0dGJiMzNDssICYjMzQ7VkhUJiMzNDssICYjMzQ7UExSJiMzNDssCiYjNDM7CSYjMzQ7UExSUCYjMzQ7LCAmIzM0O0FMUiYjMzQ7LCAmIzM0O0hFX1NVJiMzNDssICYjMzQ7SEVfRVImIzM0OywgJiMzNDtIRV9UUklHJiMzNDssICYjMzQ7SEVfTVUmIzM0OywKJiM0MzsJJiMzNDtFSFRfRVImIzM0OywgJiMzNDtUT0YmIzM0OywgJiMzNDtFSFRfVFJJRyYjMzQ7LCAmIzM0O0VIVF9NVSYjMzQ7CiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltdID0gewomIzQzOwkmIzM0OzFNJiMzNDssICYjMzQ7Mk0mIzM0OywgJiMzNDs1LjVNJiMzNDssICYjMzQ7MTFNJiMzNDssICYjMzQ7Ti9BJiMzNDsKJiM0Mzt9OwomIzQzOwomIzQzO2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbXSA9IHsKJiM0MzsJJiMzNDtCVzIwJiMzNDssICYjMzQ7Qlc0MCYjMzQ7LCAmIzM0O0JXODAmIzM0OywgJiMzNDtCVzE2MC9CVzgwODAmIzM0OywgJiMzNDtCVzMyMCYjMzQ7LCAmIzM0O04vQSYjMzQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19yZXEgewomIzQzOwl1OCByc3ZbNF07CiYjNDM7CV9fbGUxNiB0YWc7CiYjNDM7CV9fbGUxNiBsZW47CiYjNDM7CXU4IHN0YV9yZWNfaWR4OwomIzQzOwl1OCByc3YxOwomIzQzOwl1OCBsbHNfcmVhZF9jbGVhcjsKJiM0MzsJdTggcmVzZXRfY291bnRlcjsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2V2ZW50IHsKJiM0MzsJdTggcnN2WzRdOwomIzQzOwlfX2xlMTYgdGFnOwomIzQzOwlfX2xlMTYgbGVuOwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyBzdGF0czsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qIFdUQkwgYXV0by1yYXRlIHJlcXVlc3QgVExWLCBtaXJyb3IgR2VuNG0gc3RydWN0IFVOSV9DTURfU1RBVF9XVEJMLgomIzQzOyAqIFRoZSBSQSB0YWcgcmV1c2VzIFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMICgxMCkuCiYjNDM7ICovCiYjNDM7c3RydWN0IG10NzkyNV93dGJsX3JhdGVfcmVxIHsKJiM0MzsJdTggcnN2WzRdOwomIzQzOwlfX2xlMTYgdGFnOwomIzQzOwlfX2xlMTYgbGVuOwomIzQzOwlfX2xlMTYgd2xhbl9pZHg7CiYjNDM7CV9fbGUxNiByc3YxOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyogV1RCTCBhdXRvLXJhdGUgZXZlbnQgVExWLiBGaXJtd2FyZSBhbnN3ZXJzIGNtZCB0YWcgMTAgd2l0aCBldmVudCB0YWcgMTIuICovCiYjNDM7c3RydWN0IG10NzkyNV93dGJsX3JhdGVfZXZlbnQgewomIzQzOwl1OCByc3ZbNF07CiYjNDM7CXN0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHJhdGU7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MzsvKiBmaXhlZCBmaWVsZCwgbWlycm9yIFVOSV8oQ01EfEVWRU5UKV9NSUJfSU5GTyAqLwomIzQzO3N0cnVjdCBtdDc5MjVfbWliX2hkciB7CiYjNDM7CXU4IGJhbmRfaWR4OwomIzQzOwl1OCByc3ZbM107CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MzsvKiBPbmUgcmVxdWVzdGVkL3JldHVybmVkIE1JQiBjb3VudGVyLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBX1QuICovCiYjNDM7c3RydWN0IG10NzkyNV9taWJfZGF0YSB7CiYjNDM7CV9fbGUxNiB0YWc7CS8qIFVOSV8oQ01EfEVWRU5UKV9NSUJfREFUQSA9IDAgKi8KJiM0MzsJX19sZTE2IGxlbjsKJiM0MzsJX19sZTMyIGNvdW50ZXI7CS8qIE1JQiBjb3VudGVyIElEIChlbnVtIG10NzkyNV9taWJfY291bnRlcikgKi8KJiM0MzsJX19sZTY0IGRhdGE7CS8qIG9ubHkgdmFsaWQgb24gZXZlbnQ7IGlnbm9yZWQgb24gY21kICovCiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MzsvKiBwZXItYmFuZCBsaW5rIHF1YWxpdHkgZW50cnksIG1pcnJvciBVTklfTElOS19RVUFMSVRZICovCiYjNDM7c3RydWN0IG10NzkyNV9saW5rX3F1YWxpdHkgewomIzQzOwlzOCByc3NpOwkJLyogbW92aW5nLWF2ZXJhZ2UgYmVhY29uIFJTU0kgb2YgY29ubmVjdGVkIEFQICovCiYjNDM7CXM4IGxpbmtfcXVhbGl0eTsJLyogYWx3YXlzIDAgKi8KJiM0MzsJX19sZTE2IGxpbmtfc3BlZWQ7CS8qIFRYIHJhdGUxLCB1bml0IDUwMCBLYi9zICovCiYjNDM7CXU4IG1lZGl1bV9idXN5X3BjdDsJLyogYWx3YXlzIDAgKi8KJiM0MzsJdTggaXNfcmVhZHk7CQkvKiAwOiBmaWVsZHMgaW52YWxpZCwgMTogdmFsaWQgKi8KJiM0MzsJdTggcnN2WzJdOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyogcmVxdWVzdCBUTFYsIG1pcnJvciBVTklfQ01EX0xJTktfUVVBTElUWSAoaGVhZGVyICYjNDM7IHRhZy9sZW4gb25seSkgKi8KJiM0MztzdHJ1Y3QgbXQ3OTI1X2xxX3JlcSB7CiYjNDM7CXU4IHJzdls0XTsJCS8qIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1MgZml4ZWQgZmllbGQgKi8KJiM0MzsJX19sZTE2IHRhZzsJCS8qIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEgKi8KJiM0MzsJX19sZTE2IGxlbjsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qIGV2ZW50IFRMViwgbWlycm9yIFVOSV9FVkVOVF9MSU5LX1FVQUxJVFkgKi8KJiM0MztzdHJ1Y3QgbXQ3OTI1X2xxX2V2ZW50IHsKJiM0MzsJdTggcnN2WzRdOwkJLyogVU5JX0VWRU5UX1NUQVRJU1RJQ1MgZml4ZWQgZmllbGQgKi8KJiM0MzsJX19sZTE2IHRhZzsJCS8qIFVOSV9FVkVOVF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSA9IDEgKi8KJiM0MzsJX19sZTE2IGxlbjsKJiM0MzsJc3RydWN0IG10NzkyNV9saW5rX3F1YWxpdHkgbHFbTVQ3OTI1X0xRX0JBTkRfTlVNXTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7bXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeF9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwICpsb29rdXAgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgbXQ3OTJ4X3ZpZiAqbXZpZjsKJiM0MzsJc3RydWN0IG10NzkyeF9zdGEgKm1zdGE7CiYjNDM7CiYjNDM7CWlmIChsb29rdXAtJmd0O3N0YV9yZWNfaWR4ICZndDs9IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICh2aWYtJmd0O3R5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fCAhdmlmLSZndDtjZmcuYXNzb2MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW12aWYgPSAoc3RydWN0IG10NzkyeF92aWYgKil2aWYtJmd0O2Rydl9wcml2OwomIzQzOwltc3RhID0gbXZpZi0mZ3Q7d2VwX3N0YTsKJiM0MzsJaWYgKCFtc3RhKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIW1zdGEtJmd0O2RlZmxpbmsud2NpZC5zdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxvb2t1cC0mZ3Q7c3RhX3JlY19pZHggPSBtc3RhLSZndDtkZWZsaW5rLndjaWQuaWR4OwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0MzttdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICpzdGFfcmVjX2lkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3JlY19sb29rdXAgbG9va3VwID0gewomIzQzOwkJLnN0YV9yZWNfaWR4ID0gLTEsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkZXYtJmd0O210NzYubXV0ZXgpOwomIzQzOwomIzQzOwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhkZXYtJmd0O21waHkuaHcsCiYjNDM7CQkJCQkgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfUkVTVU1FX0FMTCwKJiM0MzsJCQkJCSAgICBtdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4X2l0ZXIsCiYjNDM7CQkJCQkgICAgJmFtcDtsb29rdXApOwomIzQzOwomIzQzOwlpZiAobG9va3VwLnN0YV9yZWNfaWR4ICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRU5PVENPTk47CiYjNDM7CiYjNDM7CWlmIChsb29rdXAuc3RhX3JlY19pZHggJmd0OyBVOF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJKnN0YV9yZWNfaWR4ID0gbG9va3VwLnN0YV9yZWNfaWR4OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRGVjb2RlIHRoZSBUWCBWZWN0b3IgQkJQIGxhdGNoIGFuZCBwcmludCB0aGUgbGFzdCBUWCByYXRlICovCiYjNDM7dm9pZAomIzQzO210NzkyNV9wcmludF9sYXN0X3R4X3JhdGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBfX2xlMzIgbGVfdHh2WzNdKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqbW9kZV9zdHIgPSAmIzM0O04vQSYjMzQ7OwomIzQzOwl1OCByYXRlLCB0eG1vZGUsIGZybW9kZSwgc2dpLCBsZHBjLCBuc3RzLCBzdGJjLCBzcGUsIGRjbSwgZXJzdTEwNnQ7CiYjNDM7CXM4IHR4cHdyLCBwb3NfdHhwd3I7CiYjNDM7CXUzMiB0eHZbM107CiYjNDM7CiYjNDM7CXR4dlswXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlswXSk7CiYjNDM7CXR4dlsxXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsxXSk7CiYjNDM7CXR4dlsyXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsyXSk7CiYjNDM7CiYjNDM7CWlmICh0eHZbMF0gPT0gMHhmZmZmZmZmZikgewomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICAlcyA9ICVzXG4mIzM0OywgJiMzNDsgJiMzNDssICYjMzQ7TGFzdCBUWCBSYXRlJiMzNDssICYjMzQ7Ti9BJiMzNDspOwomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICAlcyA9ICVzXG4mIzM0OywKJiM0MzsJCQkgICAmIzM0OyAmIzM0OywgJiMzNDtDaGlwIE91dCBUWCBQb3dlciYjMzQ7LCAmIzM0O04vQSYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXRlID0gTVQ3OTI1X1RYVl9HRVRfVFhfUkFURSh0eHYpOwomIzQzOwl0eG1vZGUgPSBNVDc5MjVfVFhWX0dFVF9UWF9NT0RFKHR4dik7CiYjNDM7CWZybW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX0ZSTU9ERSh0eHYpOwomIzQzOwluc3RzID0gTVQ3OTI1X1RYVl9HRVRfVFhfTlNUUyh0eHYpICYjNDM7IDE7CiYjNDM7CXNnaSA9IE1UNzkyNV9UWFZfR0VUX1RYX1NHSSh0eHYpOwomIzQzOwlsZHBjID0gTVQ3OTI1X1RYVl9HRVRfVFhfTERQQyh0eHYpOwomIzQzOwlzdGJjID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyh0eHYpOwomIzQzOwl0eHB3ciA9IE1UNzkyNV9UWFZfR0VUX1RYX1BXUih0eHYpOwomIzQzOwlzcGUgPSBNVDc5MjVfVFhWX0dFVF9UWF9TUEVfSURYKHR4dik7CiYjNDM7CWRjbSA9IE1UNzkyNV9UWFZfR0VUX1RYX0RDTSh0eHYpOwomIzQzOwllcnN1MTA2dCA9IE1UNzkyNV9UWFZfR0VUX1RYXzEwNlQodHh2KTsKJiM0MzsKJiM0MzsJaWYgKGRjbSkKJiM0MzsJCXJhdGUgPSBNVDc5MjVfVFhWX1JBVEVfVU5NQVNLX0RDTShyYXRlKTsKJiM0MzsJaWYgKGVyc3UxMDZ0KQomIzQzOwkJcmF0ZSA9IE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfMTA2VChyYXRlKTsKJiM0MzsKJiM0MzsJaWYgKHR4bW9kZSAmbHQ7IEFSUkFZX1NJWkUobXQ3OTI1X3R4X21vZGVfc3RyKSkKJiM0MzsJCW1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07CiYjNDM7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslLTIycyAgJXMgPSAmIzM0OywgJiMzNDsgJiMzNDssICYjMzQ7TGFzdCBUWCBSYXRlJiMzNDspOwomIzQzOwomIzQzOwkvKiByYXRlL01DUyBmaWVsZCAqLwomIzQzOwlpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywKJiM0MzsJCQkgICByYXRlICZsdDsgNCA/IG10NzkyNV90eF9yYXRlX2Nja19zdHJbcmF0ZV0gOgomIzQzOwkJCSAgICgoKHJhdGUgJmd0Oz0gNSkgJmFtcDsmYW1wOyAocmF0ZSAmbHQ7PSA3KSkgPwomIzQzOwkJCSAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGUgLSA0XSA6CiYjNDM7CQkJICAgIG10NzkyNV90eF9yYXRlX2Nja19zdHJbNF0pKTsKJiM0MzsJZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSkKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslcywgJiMzNDssIG10NzkyNV9od19yYXRlX29mZG1fc3RyKHJhdGUpKTsKJiM0MzsJZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHwKJiM0MzsJCSB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGKQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0O01DUyVkLCAmIzM0OywgcmF0ZSk7CiYjNDM7CWVsc2UKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslcyVkX01DUyVkLCAmIzM0OywKJiM0MzsJCQkgICBzdGJjID8gJiMzNDtOU1RTJiMzNDsgOiAmIzM0O05TUyYjMzQ7LCBuc3RzLCByYXRlKTsKJiM0MzsKJiM0MzsJLyogYmFuZHdpZHRoICovCiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslcywgJiMzNDssCiYjNDM7CQkgICBmcm1vZGUgJmx0OyA1ID8gbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZybW9kZV0gOgomIzQzOwkJICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTsKJiM0MzsKJiM0MzsJLyogR0kgLyBwcmVhbWJsZSAqLwomIzQzOwlpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywgcmF0ZSAmbHQ7IDQgPyAmIzM0O0xQJiMzNDsgOiAmIzM0O1NQJiMzNDspOwomIzQzOwllbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKQomIzQzOwkJOyAvKiBPRkRNIGhhcyBubyBHSS9wcmVhbWJsZSB0byBwcmludCAqLwomIzQzOwllbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCB8fAomIzQzOwkJIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YgfHwKJiM0MzsJCSB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9WSFQgfHwKJiM0MzsJCSB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIpCiYjNDM7CQlzZXFfcHJpbnRmKHMsICYjMzQ7JXMsICYjMzQ7LCBzZ2kgPT0gMCA/ICYjMzQ7TEdJJiMzNDsgOiAmIzM0O1NHSSYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJc2VxX3ByaW50ZihzLCAmIzM0OyVzLCAmIzM0OywKJiM0MzsJCQkgICBzZ2kgPT0gMCA/ICYjMzQ7U0dJJiMzNDsgOiAoc2dpID09IDEgPyAmIzM0O01HSSYjMzQ7IDogJiMzNDtMR0kmIzM0OykpOwomIzQzOwomIzQzOwkvKiBtb2RlLCBEQ00sIDEwNnQsIFNUQkMsIGNvZGluZywgU1BFICovCiYjNDM7CXNlcV9wcmludGYocywgJiMzNDslcyVzJXMlcyVzJXMlZFxuJiMzNDssCiYjNDM7CQkgICBtb2RlX3N0ciwKJiM0MzsJCSAgIGRjbSA/ICYjMzQ7LCBEQ00mIzM0OyA6ICYjMzQ7JiMzNDssIGVyc3UxMDZ0ID8gJiMzNDssIDEwNnQmIzM0OyA6ICYjMzQ7JiMzNDssCiYjNDM7CQkgICBzdGJjID8gJiMzNDssIFNUQkMsICYjMzQ7IDogJiMzNDssICYjMzQ7LCBsZHBjID09IDAgPyAmIzM0O0JDQyYjMzQ7IDogJiMzNDtMRFBDJiMzNDssCiYjNDM7CQkgICAmIzM0OywgU1BFJiMzNDssIHNwZSk7CiYjNDM7CiYjNDM7CS8qIGNoaXAgb3V0IFRYIHBvd2VyICh1bml0OiAwLjUgZEJtKSAqLwomIzQzOwlwb3NfdHhwd3IgPSAodHhwd3IgJmx0OyAwKSA/ICh+dHhwd3IgJiM0MzsgMSkgOiB0eHB3cjsKJiM0MzsJc2VxX3ByaW50ZihzLCAmIzM0OyUtMjJzICAlcyA9ICVjJWQuJTFkIGRCbVxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAmIzM0OywgJiMzNDtDaGlwIE91dCBUWCBQb3dlciYjMzQ7LAomIzQzOwkJICAgKHR4cHdyICZsdDsgMCkgPyAmIzM5Oy0mIzM5OyA6ICYjMzk7JiM0MzsmIzM5OywKJiM0MzsJCSAgIChwb3NfdHhwd3IgLyAyKSwgNSAqIChwb3NfdHhwd3IgJSAyKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEd1YXJkIGludGVydmFsIHVzZWQgZm9yIHRoZSBhdXRvLXJhdGUgZW50cmllcywgbWlycm9yIEdlbjRtCiYjNDM7ICogY29ubmFjM3hfZ2V0X3NnaV9pbmZvX2Zyb21fZncoKTogcGljayB0aGUgcGVyLW1vZGUvcGVyLUJXIGZsYWcuCiYjNDM7ICovCiYjNDM7dTgKJiM0MzttdDc5MjVfd3RibF9nZXRfc2dpKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlLCB1OCBmY2FwKQomIzQzO3sKJiM0MzsJYm9vbCBoZSA9ICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9TVSB8fAomIzQzOwkJICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgfHwKJiM0MzsJCSAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1RSSUcgfHwKJiM0MzsJCSAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VKTsKJiM0MzsJYm9vbCBlaHQgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX0VSIHx8CiYjNDM7CQkgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUcgfHwKJiM0MzsJCSAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUpOwomIzQzOwomIzQzOwlpZiAoZWh0KQomIzQzOwkJcmV0dXJuIHdyLSZndDtnaV9laHQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZmNhcCkgewomIzQzOwljYXNlIE1UNzkyNV9CV18yMDoKJiM0MzsJCXJldHVybiBoZSA/IHdyLSZndDtnMl9oZSA6IHdyLSZndDtnMjsKJiM0MzsJY2FzZSBNVDc5MjVfQldfNDA6CiYjNDM7CQlyZXR1cm4gaGUgPyB3ci0mZ3Q7ZzRfaGUgOiB3ci0mZ3Q7ZzQ7CiYjNDM7CWNhc2UgTVQ3OTI1X0JXXzgwOgomIzQzOwkJcmV0dXJuIGhlID8gd3ItJmd0O2c4X2hlIDogd3ItJmd0O2c4OwomIzQzOwljYXNlIE1UNzkyNV9CV18xNjA6CiYjNDM7CQlyZXR1cm4gaGUgPyB3ci0mZ3Q7ZzE2X2hlIDogd3ItJmd0O2cxNjsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIENvZGluZyB1c2VkIGZvciB0aGUgYXV0by1yYXRlIGVudHJpZXMsIG1pcnJvciBHZW40bQomIzQzOyAqIGNvbm5hYzN4X3d0YmxfZ2V0X2xkcGNfaW5mb19mcm9tX2Z3KCk6IDAgPSBCQ0MsIDEgPSBMRFBDLgomIzQzOyAqLwomIzQzO3U4CiYjNDM7bXQ3OTI1X3d0YmxfZ2V0X2xkcGMoY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyLCB1OCB0eG1vZGUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHR4bW9kZSkgewomIzQzOwljYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVg6CiYjNDM7CWNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGOgomIzQzOwkJcmV0dXJuIHdyLSZndDtodF9sZHBjOwomIzQzOwljYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfVkhUOgomIzQzOwkJcmV0dXJuIHdyLSZndDt2aHRfbGRwYzsKJiM0MzsJY2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVOgomIzQzOwljYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVI6CiYjNDM7CWNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHOgomIzQzOwljYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfTVU6CiYjNDM7CQlyZXR1cm4gd3ItJmd0O2hlX2xkcGM7CiYjNDM7CWNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfRVI6CiYjNDM7CWNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfVFJJRzoKJiM0MzsJY2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9NVToKJiM0MzsJCXJldHVybiB3ci0mZ3Q7ZWh0X2xkcGM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LAomIzQzOwkJCXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXUxNiBsZW4gPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKmV2ZW50ID0gTlVMTDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX3JlcSByZXEgPSB7CiYjNDM7CQkudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NUQSksCiYjNDM7CQkubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLAomIzQzOwkJLmxsc19yZWFkX2NsZWFyID0gZmFsc2UsCiYjNDM7CQkucmVzZXRfY291bnRlciA9IGZhbHNlLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXQgPSBtdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4KGRldiwgJmFtcDtyZXEuc3RhX3JlY19pZHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFzdGF0cykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKCZhbXA7ZGV2LSZndDttdDc2LAomIzQzOwkJCQkJTUNVX1VOSV9RVUVSWShHRVRfU1RBVF9JTkZPKSwKJiM0MzsJCQkJCSZhbXA7cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgJmFtcDtza2IpOwomIzQzOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZXZlbnQgPSAoc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKilza2ItJmd0O2RhdGE7CiYjNDM7CiYjNDM7CWlmIChsZTE2X3RvX2NwdShldmVudC0mZ3Q7dGFnKSAhPSBVTklfQ01EX0lEX1NUQVRJU1RJQ1NfU1RBKSB7CiYjNDM7CQlyZXQgPSAtRVBST1RPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVuID0gbGUxNl90b19jcHUoZXZlbnQtJmd0O2xlbik7CiYjNDM7CWlmIChsZW4gJmx0OyBzaXplb2YoKmV2ZW50KSAtIHNpemVvZihldmVudC0mZ3Q7cnN2KSB8fAomIzQzOwkgICAgbGVuICZndDsgc2tiLSZndDtsZW4gLSBzaXplb2YoZXZlbnQtJmd0O3JzdikgfHwgIUlTX0FMSUdORUQobGVuLCA0KSkgewomIzQzOwkJcmV0ID0gLUVNU0dTSVpFOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGV2ZW50LSZndDtzdGF0cy52ZXJzaW9uICE9IE1UNzkyNV9TVEFfU1RBVFNfVkVSU0lPTikgewomIzQzOwkJcmV0ID0gLUVQUk9UTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghKGxlMzJfdG9fY3B1KGV2ZW50LSZndDtzdGF0cy5mbGFncykgJmFtcDsgTVQ3OTI1X1NUQV9TVEFUU19WQUxJRCkpIHsKJiM0MzsJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwltZW1jcHkoc3RhdHMsICZhbXA7ZXZlbnQtJmd0O3N0YXRzLCBzaXplb2YoKnN0YXRzKSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtdDc5MjVfbWN1X2dldF9taWJfaW5mbyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCBiYW5kX2lkeCwKJiM0MzsJCQkgICAgY29uc3QgdTMyICpjb3VudGVycywgdTggY291bnRlcl9udW0sCiYjNDM7CQkJICAgIHU2NCAqdmFsdWVzKQomIzQzO3sKJiM0MzsJdTggKnJlcTsKJiM0MzsJdTggKnRsdiwgKnRsdl9lbmQ7CiYjNDM7CXUxNiByZXFfbGVuOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIgKnJlcV9oZHI7CiYjNDM7CXN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKnJlcV90bHY7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CWlmICghY291bnRlcnMgfHwgIXZhbHVlcyB8fCAhY291bnRlcl9udW0gfHwKJiM0MzsJICAgIGNvdW50ZXJfbnVtICZndDsgTVQ3OTI1X01JQl9NQVhfQ05UKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIGNsZWFyIG91dHB1dDsgY291bnRlcnMgbm90IHJldHVybmVkIGJ5IGZpcm13YXJlIHN0YXkgMCAqLwomIzQzOwltZW1zZXQodmFsdWVzLCAwLCBjb3VudGVyX251bSAqIHNpemVvZigqdmFsdWVzKSk7CiYjNDM7CiYjNDM7CXJlcV9sZW4gPSBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSAmIzQzOwomIzQzOwkJICBjb3VudGVyX251bSAqIHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKTsKJiM0MzsKJiM0MzsJcmVxID0ga3phbGxvYyhyZXFfbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFyZXEpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmVxX2hkciA9IChzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIgKilyZXE7CiYjNDM7CXJlcV9oZHItJmd0O2JhbmRfaWR4ID0gYmFuZF9pZHg7CiYjNDM7CiYjNDM7CXJlcV90bHYgPSAoc3RydWN0IG10NzkyNV9taWJfZGF0YSAqKShyZXEgJiM0Mzsgc2l6ZW9mKCpyZXFfaGRyKSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudGVyX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcV90bHZbaV0udGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9NSUJfREFUQSk7CiYjNDM7CQlyZXFfdGx2W2ldLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKSk7CiYjNDM7CQlyZXFfdGx2W2ldLmNvdW50ZXIgPSBjcHVfdG9fbGUzMihjb3VudGVyc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZygmYW1wO2Rldi0mZ3Q7bXQ3NiwKJiM0MzsJCQkJCU1DVV9VTklfUVVFUlkoR0VUX01JQl9JTkZPKSwgcmVxLAomIzQzOwkJCQkJcmVxX2xlbiwgdHJ1ZSwgJmFtcDtza2IpOwomIzQzOwlrZnJlZShyZXEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcikpIHsKJiM0MzsJCXJldCA9IC1FTVNHU0laRTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdhbGsgdGhlIHJldHVybmVkIFRMVnMsIG1hdGNoIGVhY2ggY291bnRlciBJRCB0byB0aGUgcmVxdWVzdCAqLwomIzQzOwl0bHYgPSBza2ItJmd0O2RhdGEgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcik7CiYjNDM7CXRsdl9lbmQgPSBza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtsZW47CiYjNDM7CiYjNDM7CXdoaWxlICh0bHYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpICZsdDs9IHRsdl9lbmQpIHsKJiM0MzsJCXN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKmV2dF90bHYgPQomIzQzOwkJCShzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICopdGx2OwomIzQzOwkJdTE2IHRhZyA9IGxlMTZfdG9fY3B1KGV2dF90bHYtJmd0O3RhZyk7CiYjNDM7CQl1MTYgbGVuID0gbGUxNl90b19jcHUoZXZ0X3Rsdi0mZ3Q7bGVuKTsKJiM0MzsJCXUzMiBjb3VudGVyOwomIzQzOwomIzQzOwkJaWYgKGxlbiAmbHQ7IHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKSB8fAomIzQzOwkJICAgIHRsdiAmIzQzOyBsZW4gJmd0OyB0bHZfZW5kKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKHRhZyA9PSBVTklfQ01EX01JQl9EQVRBKSB7CiYjNDM7CQkJY291bnRlciA9IGxlMzJfdG9fY3B1KGV2dF90bHYtJmd0O2NvdW50ZXIpOwomIzQzOwomIzQzOwkJCWlmIChjb3VudGVyICZsdDsgTVQ3OTI1X01JQl9DTlRfTUFYX05VTSkgewomIzQzOwkJCQlmb3IgKGkgPSAwOyBpICZsdDsgY291bnRlcl9udW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCQlpZiAoY291bnRlcnNbaV0gPT0gY291bnRlcikgewomIzQzOwkJCQkJCXZhbHVlc1tpXSA9CiYjNDM7CQkJCQkJICBsZTY0X3RvX2NwdShldnRfdGx2LSZndDtkYXRhKTsKJiM0MzsJCQkJCQlicmVhazsKJiM0MzsJCQkJCX0KJiM0MzsJCQkJfQomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXRsdiAmIzQzOz0gbGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IDA7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgKm10NzkyNV9od19yYXRlX29mZG1fc3RyKHU4IG9mZG1faWR4KQomIzQzO3sKJiM0MzsJY2hhciAqIGNvbnN0IG9mZG1fc3RyW10gPSB7CiYjNDM7CQkmIzM0OzZNJiMzNDssICYjMzQ7OU0mIzM0OywgJiMzNDsxMk0mIzM0OywgJiMzNDsxOE0mIzM0OywgJiMzNDsyNE0mIzM0OywgJiMzNDszNk0mIzM0OywgJiMzNDs0OE0mIzM0OywgJiMzNDs1NE0mIzM0OywgJiMzNDtOL0EmIzM0OwomIzQzOwl9OwomIzQzOwomIzQzOwlzd2l0Y2ggKG9mZG1faWR4KSB7CiYjNDM7CWNhc2UgMTE6IHJldHVybiBvZmRtX3N0clswXTsJLyogNk0gKi8KJiM0MzsJY2FzZSAxNTogcmV0dXJuIG9mZG1fc3RyWzFdOwkvKiA5TSAqLwomIzQzOwljYXNlIDEwOiByZXR1cm4gb2ZkbV9zdHJbMl07CS8qIDEyTSAqLwomIzQzOwljYXNlIDE0OiByZXR1cm4gb2ZkbV9zdHJbM107CS8qIDE4TSAqLwomIzQzOwljYXNlIDk6ICByZXR1cm4gb2ZkbV9zdHJbNF07CS8qIDI0TSAqLwomIzQzOwljYXNlIDEzOiByZXR1cm4gb2ZkbV9zdHJbNV07CS8qIDM2TSAqLwomIzQzOwljYXNlIDg6ICByZXR1cm4gb2ZkbV9zdHJbNl07CS8qIDQ4TSAqLwomIzQzOwljYXNlIDEyOiByZXR1cm4gb2ZkbV9zdHJbN107CS8qIDU0TSAqLwomIzQzOwlkZWZhdWx0OiByZXR1cm4gb2ZkbV9zdHJbOF07CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlIC0gZmV0Y2ggdGhlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSBmb3IgYSBXQ0lECiYjNDM7ICogQGRldjoJZGV2aWNlCiYjNDM7ICogQHdsYW5faWR4OglIVyBXVEJMIC8gV0NJRCBpbmRleCAoc2VlIG10NzkyNV9zdGFfc3RhdHMud3RibF9pZHgpCiYjNDM7ICogQHJhdGU6CW91dCwgZmlsbGVkIHdpdGggdGhlIGF1dG8tcmF0ZSB0YWJsZSBzbmFwc2hvdAomIzQzOyAqCiYjNDM7ICogTWlycm9yIG9mIEdlbjRtIHdsYW5vaWRHZXRTdGF0V3RibCgpOiBzZW5kIFVOSV9DTURfR0VUX1NUQVRfSU5GTyB3aXRoIHRoZQomIzQzOyAqIFdUQkwgcmF0ZSBUTFYgKGNtZCB0YWcgMTApIGFuZCBwYXJzZSB0aGUgcmVwbHkgKGV2ZW50IHRhZyAxMikgaW50byBAcmF0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7aW50IG10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MTYgd2xhbl9pZHgsCiYjNDM7CQkJICAgICBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqcmF0ZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICpldmVudCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZV9yZXEgcmVxID0gewomIzQzOwkJLnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMKSwKJiM0MzsJCS5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksCiYjNDM7CQkud2xhbl9pZHggPSBjcHVfdG9fbGUxNih3bGFuX2lkeCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmICghcmF0ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKCZhbXA7ZGV2LSZndDttdDc2LAomIzQzOwkJCQkJTUNVX1VOSV9RVUVSWShHRVRfU1RBVF9JTkZPKSwKJiM0MzsJCQkJCSZhbXA7cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgJmFtcDtza2IpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKCpldmVudCkpIHsKJiM0MzsJCXJldCA9IC1FTVNHU0laRTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICopc2tiLSZndDtkYXRhOwomIzQzOwomIzQzOwlpZiAobGUxNl90b19jcHUoZXZlbnQtJmd0O3JhdGUudGFnKSAhPSBNVDc5MjVfVU5JX0VWRU5UX1NUQVRJU1RJQ1NfV1RCTCkgewomIzQzOwkJcmV0ID0gLUVQUk9UTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbWNweShyYXRlLCAmYW1wO2V2ZW50LSZndDtyYXRlLCBzaXplb2YoKnJhdGUpKTsKJiM0MzsJcmV0ID0gMDsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5IC0gcXVlcnkgUlNTSSBhbmQgVFggbGluayBzcGVlZCBmb3IgYSBiYW5kCiYjNDM7ICogQGRldjoJZGV2aWNlCiYjNDM7ICogQGJhbmRfaWR4OgliYW5kL0JTUyBpbmRleCAoMC4uMykKJiM0MzsgKiBAcnNzaToJb3V0LCBtb3ZpbmctYXZlcmFnZSBiZWFjb24gUlNTSSBpbiBkQm0gKG1heSBiZSBOVUxMKQomIzQzOyAqIEB0eF9saW5rX3NwZWVkX2ticHM6IG91dCwgVFggcmF0ZSBpbiBrYml0L3MgKG1heSBiZSBOVUxMKQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9FTlQgaWYgdGhlIGJhbmQmIzM5O3MgbGluayBxdWFsaXR5IGlzIG5vdCByZWFkeS4KJiM0MzsgKgomIzQzOyAqIE9ubHkgUlNTSSBhbmQgVFggcmF0ZSBjb21lIGZyb20gZmlybXdhcmUgaGVyZTsgZm9yIFJYIHJhdGUgcmVhZCB3Y2lkLSZndDtyYXRlLgomIzQzOyAqLwomIzQzO2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsCiYjNDM7CQkJCXM4ICpyc3NpLCB1MzIgKnR4X2xpbmtfc3BlZWRfa2JwcykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0cnVjdCBtdDc5MjVfbHFfZXZlbnQgKmV2ZW50OwomIzQzOwlzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSAqbHE7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXN0cnVjdCBtdDc5MjVfbHFfcmVxIHJlcSA9IHsKJiM0MzsJCS50YWcgPSBjcHVfdG9fbGUxNihVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19RVUFMSVRZKSwKJiM0MzsJCS5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChiYW5kX2lkeCAmZ3Q7PSBNVDc5MjVfTFFfQkFORF9OVU0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZygmYW1wO2Rldi0mZ3Q7bXQ3NiwKJiM0MzsJCQkJCU1DVV9VTklfUVVFUlkoR0VUX1NUQVRfSU5GTyksICZhbXA7cmVxLAomIzQzOwkJCQkJc2l6ZW9mKHJlcSksIHRydWUsICZhbXA7c2tiKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqZXZlbnQpKSB7CiYjNDM7CQlyZXQgPSAtRU1TR1NJWkU7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlldmVudCA9IChzdHJ1Y3QgbXQ3OTI1X2xxX2V2ZW50ICopc2tiLSZndDtkYXRhOwomIzQzOwomIzQzOwlpZiAobGUxNl90b19jcHUoZXZlbnQtJmd0O3RhZykgIT0gVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSkgewomIzQzOwkJcmV0ID0gLUVQUk9UTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWxxID0gJmFtcDtldmVudC0mZ3Q7bHFbYmFuZF9pZHhdOwomIzQzOwlpZiAoIWxxLSZndDtpc19yZWFkeSkgewomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyc3NpKQomIzQzOwkJKnJzc2kgPSBscS0mZ3Q7cnNzaTsKJiM0MzsKJiM0MzsJLyogZmlybXdhcmUgcmVwb3J0cyBUWCByYXRlIGluIDUwMCBLYi9zIHVuaXRzIC0mZ3Q7IGtiaXQvcyAqLwomIzQzOwlpZiAodHhfbGlua19zcGVlZF9rYnBzKQomIzQzOwkJKnR4X2xpbmtfc3BlZWRfa2JwcyA9IGxlMTZfdG9fY3B1KGxxLSZndDtsaW5rX3NwZWVkKSAqIDUwMDsKJiM0MzsKJiM0MzsJcmV0ID0gMDsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hNzBiOWViM2FhODA2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaApAQCAtMCwwICYjNDM7MSwzMDkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyICovCiYjNDM7LyogQ29weXJpZ2h0IChDKSAyMDI2IE1lZGlhVGVrIEluYy4gKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fTVQ3OTI1X1NUQVRTX0gKJiM0MzsjZGVmaW5lIF9fTVQ3OTI1X1NUQVRTX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL210NzZfY29ubmFjX21jdS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfQUNfTlVNIDQKJiM0MzsjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfQkFORF9OVU0gMgomIzQzOyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNIDE2CiYjNDM7I2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1RYX1FVQUxJVFlfTlVNIDQKJiM0MzsjZGVmaW5lIE1UNzkyNV9UWF9NT0RFX05VTSAgICAgIDE2CiYjNDM7I2RlZmluZSBNVDc5MjVfVFhfUkFURV9DQ0tfTlVNICA1CiYjNDM7I2RlZmluZSBNVDc5MjVfVFhfUkFURV9CV19OVU0gICA2CiYjNDM7CiYjNDM7LyogSFcgcmF0ZSBjb2RlICgxNi1iaXQpIGZpZWxkIGV4dHJhY3QsIG1pcnJvciBHZW40bSBDT05OQUMzWF9IV19UWF9SQVRFX1RPXyouCiYjNDM7ICogVGhlIGF1dG8tcmF0ZSB0YWJsZSBzdG9yZXMgb25lIHJhdGUgY29kZSBwZXIgZW50cnkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19NQ1MoX3gpCSgoKF94KSAmYW1wOyBHRU5NQVNLKDUsIDApKSAmZ3Q7Jmd0OyAwKQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fTU9ERShfeCkJKCgoX3gpICZhbXA7IEdFTk1BU0soOSwgNikpICZndDsmZ3Q7IDYpCiYjNDM7I2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19OU1MoX3gpCSgoKF94KSAmYW1wOyBHRU5NQVNLKDEzLCAxMCkpICZndDsmZ3Q7IDEwKQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fU1RCQyhfeCkJKCgoX3gpICZhbXA7IEJJVCgxNCkpICZndDsmZ3Q7IDE0KQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fRENNKF94KQkoKChfeCkgJmFtcDsgQklUKDQpKSAmZ3Q7Jmd0OyA0KQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fMTA2VChfeCkJKCgoX3gpICZhbXA7IEJJVCg1KSkgJmd0OyZndDsgNSkKJiM0MzsjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00oX3IpCSgodTgpKF9yKSAmYW1wOyAweGVmKQomIzQzOyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVU5NQVNLXzEwNlQoX3IpCSgodTgpKF9yKSAmYW1wOyAweGRmKQomIzQzOwomIzQzOy8qIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgKG1pcnJvciBHZW40bQomIzQzOyAqIEFVVE9fUkFURV9OVU0pLiBSQSBjeWNsZXMgdGhyb3VnaCB0aGVzZSBhbmQgcmVwb3J0cyB3aGljaCBvbmUgaXMgaW4gdXNlCiYjNDM7ICogdmlhIHd0YmwtJmd0O3JhdGVfaWR4LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTVQ3OTI1X0FVVE9fUkFURV9OVU0gOAomIzQzOwomIzQzOy8qIEZpcm13YXJlIEVWRU5UX1NUQVRJU1RJQ1Mgc3ViLWV2ZW50IHRhZ3MuIFRoZSBXVEJMIHJhdGUgcmVxdWVzdCB1c2VzIGNtZCB0YWcKJiM0MzsgKiBVTklfQ01EX0lEX1NUQVRJU1RJQ1NfV1RCTCAoMTApIGJ1dCB0aGUgZmlybXdhcmUgcmVwbGllcyB3aXRoIGV2ZW50IHRhZyAxMi4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1UNzkyNV9VTklfRVZFTlRfU1RBVElTVElDU19XVEJMIDEyCiYjNDM7CiYjNDM7LyogQ09OTkFDM1ggVFggVmVjdG9yIEJCUCBsYXRjaCBiaXQgZmllbGRzIChtaXJyb3IgY21tX2FzaWNfY29ubmFjM3guaCkuCiYjNDM7ICogVGhlc2Ugb3BlcmF0ZSBvbiB0aGUgMy1EV09SRCB0eF92ZWN0b3JbYmFuZF0udHh2WzNdIGFycmF5LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUkFURShfdHh2KQkoKF90eHYpWzJdICZhbXA7IDB4N2YpCiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9MRFBDKF90eHYpCSgoKF90eHYpWzJdICZhbXA7ICgweDEgJmx0OyZsdDsgNykpICZndDsmZ3Q7IDcpCiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9TVEJDKF90eHYpCSgoKF90eHYpWzBdICZhbXA7ICgweDMgJmx0OyZsdDsgNikpICZndDsmZ3Q7IDYpCiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9GUk1PREUoX3R4dikJKCgoX3R4dilbMF0gJmFtcDsgKDB4NyAmbHQ7Jmx0OyA4KSkgJmd0OyZndDsgOCkKJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX01PREUoX3R4dikJKCgoX3R4dilbMF0gJmFtcDsgKDB4ZiAmbHQ7Jmx0OyAxMikpICZndDsmZ3Q7IDEyKQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfTlNUUyhfdHh2KQkoKChfdHh2KVsyXSAmYW1wOyAoMHhmVSAmbHQ7Jmx0OyAyOCkpICZndDsmZ3Q7IDI4KQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUFdSKF90eHYpCSgoKF90eHYpWzBdICZhbXA7ICgweGZmICZsdDsmbHQ7IDE2KSkgJmd0OyZndDsgMTYpCiYjNDM7I2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9TR0koX3R4dikJKCgoX3R4dilbMV0gJmFtcDsgKDB4MyAmbHQ7Jmx0OyAyNikpICZndDsmZ3Q7IDI2KQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfU1BFX0lEWChfdHh2KQkoKChfdHh2KVswXSAmYW1wOyAoMHgxZiAmbHQ7Jmx0OyAwKSkgJmd0OyZndDsgMCkKJiM0MzsjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0RDTShfdHh2KQkoKChfdHh2KVsyXSAmYW1wOyAoMHgxICZsdDsmbHQ7IDQpKSAmZ3Q7Jmd0OyA0KQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfMTA2VChfdHh2KQkoKChfdHh2KVsyXSAmYW1wOyAoMHgxICZsdDsmbHQ7IDUpKSAmZ3Q7Jmd0OyA1KQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS19EQ00oX3IpCSgodTgpKF9yKSAmYW1wOyAweGVmKQomIzQzOyNkZWZpbmUgTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS18xMDZUKF9yKQkoKHU4KShfcikgJmFtcDsgMHhkZikKJiM0MzsKJiM0MztleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9tb2RlX3N0cltNVDc5MjVfVFhfTU9ERV9OVU1dOwomIzQzO2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltNVDc5MjVfVFhfUkFURV9DQ0tfTlVNXTsKJiM0MztleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9yYXRlX2J3X3N0cltNVDc5MjVfVFhfUkFURV9CV19OVU1dOwomIzQzOwomIzQzOy8qIFRYIHJhdGUgbW9kZSwgbWlycm9yIEdlbjRtIFRYX1JBVEVfTU9ERV8qIChzZWUgbmljX3JhdGUuaCkuIFVzZWQgdG8gZGVjb2RlCiYjNDM7ICogYm90aCB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCBhbmQgdGhlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSByYXRlIGNvZGVzLgomIzQzOyAqLwomIzQzO2VudW0gbXQ3OTI1X3R4X3JhdGVfbW9kZSB7CiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfQ0NLID0gMCwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNID0gMSwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCA9IDIsCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiA9IDMsCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfVkhUID0gNCwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIgPSA1LAomIzQzOwlNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVID0gOCwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9FUiA9IDksCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfSEVfVFJJRyA9IDEwLAomIzQzOwlNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VID0gMTEsCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfRUhUX0VSID0gMTMsCiYjNDM7CU1UNzkyNV9UWF9SQVRFX01PREVfRUhUX1RSSUcgPSAxNCwKJiM0MzsJTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUgPSAxNSwKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlVTklfQ01EX01JQl9EQVRBLAomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBzdGF0c19xdWVyeV9taWJfYXJyYXlfaW5kZXggewomIzQzOwlRVUVSWV9NSUJfQ05UX1JYX0ZDU19FUlIgPSAwLAomIzQzOwlRVUVSWV9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1csCiYjNDM7CVFVRVJZX01JQl9DTlRfUlhfTVBEVSwKJiM0MzsJUVVFUllfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCwKJiM0MzsJUVVFUllfTUlCX0NOVF9QRl9EUk9QLAomIzQzOwlRVUVSWV9NSUJfQ05UX0xFTl9NSVNNQVRDSCwKJiM0MzsJUVVFUllfTUlCX0NOVF9DSEFOTkVMX0lETEUsCiYjNDM7CVFVRVJZX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FLAomIzQzOwlRVUVSWV9NSUJfQ05UX01EUkRZLAomIzQzOwlRVUVSWV9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FLAomIzQzOwlRVUVSWV9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRSwKJiM0MzsJUVVFUllfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUUsCiYjNDM7CVFVRVJZX01JQl9DTlRfUF9DQ0FfVElNRSwKJiM0MzsJUVVFUllfTUlCX0NOVF9TX0NDQV9USU1FLAomIzQzOwlRVUVSWV9NSUJfQ05UX1BfRURfVElNRSwKJiM0MzsJUVVFUllfTUlCX0NOVF9CQ05fVFgsCiYjNDM7CVFVRVJZX01JQl9DTlRfVFhfQldfNDBNSFosCiYjNDM7CVFVRVJZX01JQl9DTlRfVFhfQldfODBNSFosCiYjNDM7CVFVRVJZX01JQl9DTlRfVFhfQldfMTYwTUhaLAomIzQzOwlRVUVSWV9NSUJfQ05UX0JTUzBfQkFfTUlTUywKJiM0MzsJUVVFUllfTUlCX0NOVF9CU1MwX1JUU19UWF9DTlQsCiYjNDM7CVFVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSwKJiM0MzsJUVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIsCiYjNDM7CVFVRVJZX01JQl9DTlRfQlNTMF9SVFNfUkVUUlksCiYjNDM7CVFVRVJZX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCwKJiM0MzsJUVVFUllfTUlCX0NOVF9BTVBEVSwKJiM0MzsJUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVLAomIzQzOwlRVUVSWV9NSUJfQ05UX0FNUERVX0FDS0VELAomIzQzOwlRVUVSWV9NSUJfQ05UX01BWF9OVU0sCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHN0YXRzX3RyeF9hZ2dfcmFuZ2UgewomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTBfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTFfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTJfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTNfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTRfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTVfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTZfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTdfSURYLAomIzQzOwlTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRV9NQVhfTlVNCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJTVQ3OTI1X0JXXzIwID0gMCwKJiM0MzsJTVQ3OTI1X0JXXzQwLAomIzQzOwlNVDc5MjVfQldfODAsCiYjNDM7CU1UNzkyNV9CV18xNjAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19hYyB7CiYjNDM7CV9fbGUzMiB0eF9mYWlsOwomIzQzOwlfX2xlMzIgdHhfcmV0cnk7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c190eF92ZWN0b3IgewomIzQzOwlfX2xlMzIgdHh2WzNdOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfbWliIHsKJiM0MzsJX19sZTMyIHJ4X21wZHVfY250OwomIzQzOwlfX2xlMzIgZmNzX2Vycm9yOwomIzQzOwlfX2xlMzIgcnhfZmlmb19mdWxsOwomIzQzOwlfX2xlMzIgYW1wZHVfdHhfc2ZfY250OwomIzQzOwlfX2xlMzIgYW1wZHVfdHhfYWNrX3NmX2NudDsKJiM0MzsJX19sZTMyIHR4X3JhbmdlX2FtcGR1X2NudFtNVDc5MjVfU1RBX1NUQVRTX0FHR19SQU5HRV9OVU1dOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyogRmlybXdhcmUgRVZFTlRfU1RBX1NUQVRJU1RJQ1MgYm9keS4gKi8KJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyB7CiYjNDM7CXU4IHZlcnNpb247CiYjNDM7CXU4IHJzdlszXTsKJiM0MzsJX19sZTMyIGZsYWdzOwomIzQzOwomIzQzOwl1OCBzdGFfaWR4OwomIzQzOwl1OCBic3NfaWR4OwomIzQzOwl1OCB3dGJsX2lkeDsKJiM0MzsJdTggcnN2MTsKJiM0MzsKJiM0MzsJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwomIzQzOwl1OCBwZXI7CiYjNDM7CXU4IHJjcGk7CiYjNDM7CiYjNDM7CV9fbGUzMiBwaHlfbW9kZTsKJiM0MzsJX19sZTE2IGxpbmtfc3BlZWQ7IC8qIDAuNSBNYml0L3MgdW5pdHMgKi8KJiM0MzsJdTggbGlua19xdWFsaXR5OwomIzQzOwl1OCBsaW5rX3Jlc2VydmVkOwomIzQzOwomIzQzOwlfX2xlMzIgdHhfY291bnQ7CiYjNDM7CV9fbGUzMiB0eF9mYWlsX2NvdW50OwomIzQzOwlfX2xlMzIgdHhfbGlmZV90aW1lb3V0X2NvdW50OwomIzQzOwlfX2xlMzIgdHhfZG9uZV9haXJfdGltZTsKJiM0MzsJX19sZTMyIHRyYW5zbWl0X2NvdW50OwomIzQzOwlfX2xlMzIgdHJhbnNtaXRfZmFpbF9jb3VudDsKJiM0MzsKJiM0MzsJc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfYWMgYWNbTVQ3OTI1X1NUQV9TVEFUU19BQ19OVU1dOwomIzQzOwomIzQzOwl1OCB0ZW1wZXJhdHVyZTsKJiM0MzsJdTggc2tpcF9hcjsKJiM0MzsJdTggYXJfdGFibGVfaWR4OwomIzQzOwl1OCByYXRlX2VudHJ5X2lkeDsKJiM0MzsJdTggcmF0ZV9lbnRyeV9pZHhfcHJldjsKJiM0MzsJdTggdHhfc2dpX2RldGVjdF9wYXNzX2NudDsKJiM0MzsJdTggYXZlX3BlcjsKJiM0MzsJdTggcnN2MjsKJiM0MzsKJiM0MzsJX19sZTMyIGFnZ19yYW5nZV9jdHJsWzJdOwomIzQzOwl1OCByYW5nZV9tb2RlOwomIzQzOwl1OCByc3YzWzNdOwomIzQzOwlfX2xlMzIgYWdnX3JhbmdlX2N0cmxfZXh0WzZdOwomIzQzOwomIzQzOwl1OCBhcl9zdGF0ZV9jdXJyOwomIzQzOwl1OCBhcl9zdGF0ZV9wcmV2OwomIzQzOwl1OCBhcl9hY3Rpb25fdHlwZTsKJiM0MzsJdTggaGlnaGVzdF9yYXRlX2NudDsKJiM0MzsJdTggbG93ZXN0X3JhdGVfY250OwomIzQzOwl1OCByc3Y0OwomIzQzOwlfX2xlMTYgdHJhaW5fdXA7CiYjNDM7CV9fbGUxNiB0cmFpbl9kb3duOwomIzQzOwl1OCByc3Y1WzJdOwomIzQzOwlfX2xlMzIgcmF0ZTFfdHhfY250OwomIzQzOwlfX2xlMzIgcmF0ZTFfZmFpbF9jbnQ7CiYjNDM7CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX3R4X3ZlY3RvciB0eF92ZWN0b3JbTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTV07CiYjNDM7CXN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX21pYiBtaWJbTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTV07CiYjNDM7CiYjNDM7CXU4IGlzX2ZvcmNlX3R4X3N0cmVhbTsKJiM0MzsJdTggaXNfZm9yY2Vfc2Vfb2ZmOwomIzQzOwlfX2xlMTYgcmFfcnVubmluZ19jbnQ7CiYjNDM7CXU4IHJhX3N0YXR1czsKJiM0MzsJdTggbWF4X2FtcGR1X2ZhY3RvcjsKJiM0MzsJdTggdHhfcXVhbGl0eVtNVDc5MjVfU1RBX1NUQVRTX1RYX1FVQUxJVFlfTlVNXTsKJiM0MzsJdTggdHhfcmF0ZV91cF9wZW5hbHR5OwomIzQzOwl1OCBsb3dfdHJhZmZpY19tb2RlOwomIzQzOwl1OCBsb3dfdHJhZmZpY19jb3VudDsKJiM0MzsJdTggbG93X3RyYWZmaWNfZGFzaGJvYXJkOwomIzQzOwl1OCBkeW5hbWljX3NnaV9zdGF0ZTsKJiM0MzsJdTggZHluYW1pY19zZ2lfc2NvcmU7CiYjNDM7CXU4IGR5bmFtaWNfYndfc3RhdGU7CiYjNDM7CXU4IGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlOwomIzQzOwl1OCB2aHRfbm9uX3NwX3JhdGVfc3RhdGU7CiYjNDM7CXU4IHJzdjZbM107CiYjNDM7CXU4IHJzdjdbMl07CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MztzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwIHsKJiM0MzsJaW50IHN0YV9yZWNfaWR4OwomIzQzO307CiYjNDM7CiYjNDM7LyogRmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIHNuYXBzaG90LCBtaXJyb3IgR2VuNG0gc3RydWN0IFVOSV9FVkVOVF9TVEFUX1dUQkwuCiYjNDM7ICoKJiM0MzsgKiBUaGUgZmlybXdhcmUgUkEgbWFpbnRhaW5zIHVwIHRvIE1UNzkyNV9BVVRPX1JBVEVfTlVNIGNhbmRpZGF0ZSByYXRlcyBpbgomIzQzOyAqIHJhdGVfY29kZVtdLiByYXRlX2lkeCB0ZWxscyB3aGljaCBlbnRyeSBpcyBjdXJyZW50bHkgaW4gdXNlLCBzbyBhIGR1bXAgY2FuCiYjNDM7ICogcG9pbnQgYXQgaXQgd2l0aCAmIzM0Oy0tJmd0OyYjMzQ7LiBmY2FwIGlzIHRoZSBiYW5kd2lkdGggY2FwYWJpbGl0eSBhbmQgdGhlIGxkcGMvc2dpCiYjNDM7ICogZmxhZ3MgZGVzY3JpYmUgdGhlIHBlci1tb2RlIGNvZGluZy9ndWFyZC1pbnRlcnZhbCB1c2VkIGZvciB0aG9zZSByYXRlcy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSB7CiYjNDM7CV9fbGUxNiB0YWc7CiYjNDM7CV9fbGUxNiBsZW47CiYjNDM7CXU4IHJ4X3JjcGkwOwomIzQzOwl1OCByeF9yY3BpMTsKJiM0MzsJdTggY2JybjsKJiM0MzsJdTggZmNhcDsKJiM0MzsJdTggc3BlX2lkeDsKJiM0MzsJdTggZzI7CQkJLyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlcyMCAqLwomIzQzOwl1OCBnNDsJCQkvKiBTR0kgZW5hYmxlZCwgbm9uLUhFLCBCVzQwICovCiYjNDM7CXU4IGc4OwkJCS8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXODAgKi8KJiM0MzsJdTggZzE2OwkJCS8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXMTYwICovCiYjNDM7CXU4IGcyX2hlOwkJLyogR0ksIEhFLCBCVzIwICovCiYjNDM7CXU4IGc0X2hlOwkJLyogR0ksIEhFLCBCVzQwICovCiYjNDM7CXU4IGc4X2hlOwkJLyogR0ksIEhFLCBCVzgwICovCiYjNDM7CXU4IGcxNl9oZTsJCS8qIEdJLCBIRSwgQlcxNjAgKi8KJiM0MzsJdTggZ2lfZWh0OwkJLyogR0ksIEVIVCAqLwomIzQzOwl1OCBodF9sZHBjOwomIzQzOwl1OCB2aHRfbGRwYzsKJiM0MzsJdTggaGVfbGRwYzsKJiM0MzsJdTggZWh0X2xkcGM7CiYjNDM7CXU4IGFmOwomIzQzOwl1OCByYXRlX2lkeDsJCS8qIGluZGV4IGludG8gcmF0ZV9jb2RlW10gY3VycmVudGx5IGluIHVzZSAqLwomIzQzOwlfX2xlMTYgcmF0ZV9jb2RlW01UNzkyNV9BVVRPX1JBVEVfTlVNXTsKJiM0MzsJX19sZTMyIHJzdls0XTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO2ludAomIzQzO210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggKnN0YV9yZWNfaWR4KTsKJiM0MzsKJiM0Mzt2b2lkCiYjNDM7bXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IF9fbGUzMiBsZV90eHZbM10pOwomIzQzOwomIzQzO3U4CiYjNDM7bXQ3OTI1X3d0YmxfZ2V0X3NnaShjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSwgdTggZmNhcCk7CiYjNDM7CiYjNDM7dTgKJiM0MzttdDc5MjVfd3RibF9nZXRfbGRwYyhjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSk7CiYjNDM7CiYjNDM7Y2hhciAqbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIodTggb2ZkbV9pZHgpOwomIzQzOwomIzQzO2ludCBtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTE2IHdsYW5faWR4LAomIzQzOwkJCSAgICAgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKnJhdGUpOwomIzQzOwomIzQzO2ludCBtdDc5MnhfbWN1X2dldF9zdGF0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsCiYjNDM7CQkJc3RydWN0IG10NzkyNV9zdGFfc3RhdHMgKnN0YXRzKTsKJiM0MzsKJiM0MztpbnQgbXQ3OTI1X21jdV9nZXRfbWliX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsCiYjNDM7CQkJICAgIGNvbnN0IHUzMiAqY291bnRlcnMsIHU4IGNvdW50ZXJfbnVtLAomIzQzOwkJCSAgICB1NjQgKnZhbHVlcyk7CiYjNDM7CiYjNDM7LyogR0VUX1NUQVRfSU5GTyAoVU5JX0NNRF9JRF9HRVRfU1RBVElTVElDUyA9IDB4MjMpLAomIzQzOyAqIHN1Yi1jb21tYW5kIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEuCiYjNDM7ICoKJiM0MzsgKiBAYmFuZF9pZHg6ICAgICAgICAgICAgYmFuZC9CU1MgaW5kZXggKDAuLjMpCiYjNDM7ICogQHJzc2k6ICAgICAgICAgICAgICAgIG91dCwgbW92aW5nLWF2ZXJhZ2UgYmVhY29uIFJTU0kgKGRCbSksIG1heSBiZSBOVUxMCiYjNDM7ICogQHR4X2xpbmtfc3BlZWRfa2JwczogIG91dCwgVFggbGluayBzcGVlZCBpbiBrYml0L3MsIG1heSBiZSBOVUxMCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgYmFuZCYjMzk7cyBsaW5rIHF1YWxpdHkgaXMgbm90IHJlYWR5LgomIzQzOyAqCiYjNDM7ICogTk9URTogZmlybXdhcmUgcHJvdmlkZXMgb25seSBSU1NJIGFuZCBUWCByYXRlIGhlcmUuIFJYIHJhdGUvYmFuZHdpZHRoIGFyZQomIzQzOyAqIG5vdCBpbiB0aGlzIGV2ZW50OyByZWFkIHdjaWQtJmd0O3JhdGUgZm9yIHRoZSBSWCByYXRlLgomIzQzOyAqLwomIzQzO2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsCiYjNDM7CQkJCXM4ICpyc3NpLCB1MzIgKnR4X2xpbmtfc3BlZWRfa2Jwcyk7CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDQyCgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogMTI0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlYnVnZnMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYG10NzkyNWAgd2lyZWxlc3MgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gdGhlIGRyaXZlciYjMzk7cyBmdXp6YWJpbGl0eS4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgZGVidWdmcyBmaWxlLCBgc3RhdHNgLCBmb3IgdGhlIGBtdDc5MjVgIGRyaXZlci4gSXQgaW5jbHVkZXMgYHN0YXRzLmNgLCBgc3RhdHMuaGAgYW5kIG1vZGlmaWVzIGBkZWJ1Z2ZzLmNgIHRvIHJlZ2lzdGVyIHRoZSBmaWxlIGFuZCBhbHNvIGFkZHMgc29tZSBuZXcgZW51bXMgaW4gYG10NzZfY29ubmFjX21jdS5oYC4KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiB0aGlzIGludHJvZHVjZXMgYW55IG5ldyBmdW5jdGlvbmFsIGNvZGUgcGF0aHMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gZnV6emluZy4gVGhlIGBzdGF0c2AgZGVidWdmcyBmaWxlIHNlZW1zIHRvIGJlIHJlYWRpbmcgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZSB2aWEgTUNVIGNvbW1hbmRzLiBEZWJ1Z2ZzIGZpbGVzIGFyZSBnZW5lcmFsbHkgbG93LXByaW9yaXR5IGZvciBmdXp6aW5nLCB1bmxlc3MgdGhlIHBhcnNpbmcgb3Igc3RhdGUgY2hhbmdlIGlzIGNvbXBsZXgsIGJ1dCBoZXJlIGl0JiMzOTtzIGp1c3QgYSBzaW1wbGUgcXVlcnktYW5kLXByaW50IHNpdHVhdGlvbi4KCkxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBGcm9tIGluc3BlY3RpbmcgYG10NzkyNS9kZWJ1Z2ZzLmNgLCB0aGUgcGF0Y2ggY3JlYXRlcyB0aGlzIGRlYnVnZnMgZmlsZSB1c2luZyBgZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlYCBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIGBtdDc5Mnhfc3RhdHNgLiBSaWdodCwgc28gaXQmIzM5O3MgYSBzaW1wbGUgZGVidWdmcyBmaWxlLiBBbGwgdGhlIGFjdHVhbCB3b3JrIGhhcHBlbnMgd2l0aGluIGBtdDc5Mnhfc3RhdHNgLCB3aGljaCBpdHNlbGYgY2FsbHMgdmFyaW91cyBmdW5jdGlvbnMgZGVmaW5lZCBpbiBgc3RhdHMuY2AuIExvb2tpbmcgYXQgdGhvc2UgZnVuY3Rpb25zIOKAkyBgbXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeGAsIGBtdDc5MjVfcHJpbnRfbGFzdF90eF9yYXRlYCwgYW5kIHNvIG9uIOKAkyBpdCYjMzk7cyBjbGVhciB0aGV5JiMzOTtyZSBhbGwgcmVsYXRlZCB0byBnYXRoZXJpbmcgYW5kIHByaW50aW5nIHRoZXNlIHN0YXRzLgoKQXJlIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgKmV4cG9zZWQqIG9yIHVzZWQgb3V0c2lkZSBvZiB0aGUgZGVidWdmcyBlbnRyeT8gSSBuZWVkIHRvIG1ha2Ugc3VyZS4gTm9wZSwgdGhleSYjMzk7cmUgYWxsIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBtdDc5Mnhfc3RhdHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBvZiB0aGVzZSByb3V0aW5lcyBpbiBvdGhlciBwYXRjaGVzIGluIHRoZSBzZXJpZXMuIEJ1dCBmcm9tIHRoZSBwYXRjaCBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eWAgaXMgbm90IHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGlzIHBhdGNoLgoKU28sIGl0JiMzOTtzICpqdXN0KiBhZGRpbmcgYSBkZWJ1Z2ZzIGZpbGUuIEV2ZW4gdGhvdWdoIGl0IGNvbW11bmljYXRlcyB3aXRoIHRoZSBmaXJtd2FyZSB2aWEgTUNVIGNvbW1hbmRzLCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgaXNuJiMzOTt0IGNoYW5naW5nIGhvdyB0aGUgY29yZSBkcml2ZXIgKmZ1bmN0aW9ucyouIE5vdyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHByb21wdCBmb3IgbXkgYW5hbHlzaXMuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHRoaW5ncyBsaWtlOgoKKiAgIE1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgb3IgY29tbWVudHMKKiAgIExvZ2dpbmcgKHByaW50aywgcHJfZXJyKSBvciB0cmFjZXBvaW50cwoqICAgQ29uc3RhbnQvbWFjcm8gY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24gZmxvdwoqICAgVW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMKCkRlYnVnZnMgYWRkaXRpb25zIGZvciBzdGF0aXN0aWNzIGZhbGwgdW5kZXIgdGhlICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUmIzM0OyBjYXRlZ29yeS4gVGhleSBkb24mIzM5O3QgY2hhbmdlIGhvdyB0aGUgZHJpdmVyICpvcGVyYXRlcyouIFNvIGZyb20gdGhlIHByb21wdCwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkFsc28sIEkgaGF2ZSB0byBjb25zaWRlciB0aGF0IGBtdDc5MjVgIGlzIGEgTWVkaWFUZWsgV2ktRmkgNyBkcml2ZXIgKFBDSWUvVVNCKS4gV2hpbGUgbWFjODAyMTFfaHdzaW0gKnNpbXVsYXRlcyogV2ktRmksIGl0IGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIHNwZWNpZmljIGhhcmR3YXJlLiBUaGlzIGRyaXZlciBuZWVkcyByZWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLiBCdXQsIHdhaXQsIGlzIGBtdDc5MjV1YCBhIFVTQiBkcml2ZXI/IFNpbmNlIHRoZSBwcm9tcHQgZ2l2ZXMgVVNCIGEgcGFzcywgY2FuIHN5emthbGxlciBmdXp6IHRoZSBgbXQ3OTI1dWAgZHJpdmVyIHZpYSBgdmhjaWA/IFN5emthbGxlciBoYXMgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHZpYSBkdW1teVxfaGNkL3ZoY2kuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGFzaWRlIHRoZSBQQ0llIHZzIFVTQiBkaXNjdXNzaW9uLCBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IGFkZHMgYSByZWFkIGZ1bmN0aW9uIHRvIGRlYnVnZnMuCgpUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgZGlhZ25vc3RpYyB0b29sLiBJdCBkb2VzbiYjMzk7dCBtb2RpZnkgdGhlIGRyaXZlciYjMzk7cyBmdW5jdGlvbmFsIGJlaGF2aW9yIGluIGFueSB3YXkuIEkmIzM5O20gY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSSBjYW4gbm93IHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBwcm92aWRlIHRoYXQgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgZGVidWdmcyBlbnRyeSB0byBxdWVyeSBhbmQgcHJpbnQgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZS4gSXQgaXMgYSBkaWFnbm9zdGljL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBkcml2ZXImIzM5O3MgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkZWJ1Z2ZzIGVudHJ5IHRvIHF1ZXJ5IGFuZCBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlLiBJdCBpcyBhIGRpYWdub3N0aWMvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEyOjMwLjY5NTc0MjMzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTYxMjcwNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgZGVidWdmcyBlbnRyeSB0byBxdWVyeSBhbmQgcHJpbnQgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZS4gSXQgaXMgYSBkaWFnbm9zdGljL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBkcml2ZXIncyBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEyOjMwLjY5NTc0NzU2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzMTQ4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWU1ZGI1YmQxZDNjY2VjNDk4YmEyMjg0NzJlNzFiNDY4YWFiNGRiNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwOToxMjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaFxcbmluZGV4IDBlZGVkYTU2OWU5YTUuLmJmMGYxMDVjNzg2ZTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhcXG5AQCAtMTQ4Myw2ICsxNDgzLDE3OSBAQCBlbnVtIHtcXG4gXFx0TVRfTklDX0NBUF9FTUxfQ0FQID0gMHgyMixcXG4gfTtcXG4gXFxuK2VudW0ge1xcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQkFTSUMgPSAwLFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19RVUFMSVRZID0gMSxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NUQSA9IDIsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19CVUdfUkVQT1JUID0gMyxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1RYX1NUQVRTID0gNCxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0FMTF9TVEFUUyA9IDUsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19FTUxfU1RBVFMgPSA2LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfUkVHVUxBUl9TVEFUUyA9IDcsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19CU1NfTElOS19RVUFMSVRZID0gOCxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX01MX0NITkxfQ09ORCA9IDksXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMID0gMTAsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX0xBWUVSX1NUQVRTID0gMTI4LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfUFBEVV9MQVRFTkNZID0gMTI5LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQ1VSUkVOVF9UWF9SQVRFID0gMTMwLFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfU0VUX1RYX0JJVFJBVEVfTU9OSVRPUiA9IDEzMSxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0dFVF9QUkVESUNUX1RYX0JJVFJBVEUgPSAxMzIsXFxuK1xcdFVOSV9DTURfSURfU1RBVElTVElDU19TRVRfQVRQU19UWVBFX1JBVEVfTU9ERSA9IDEzMyxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9CRUFDT05fUkVQT1JUID0gMTM0LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQlNTX0NVUlJFTlRfVFhfUkFURSA9IDEzNSxcXG4rXFx0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0dFVF9CU1NfUFJFRElDVF9UWF9CSVRSQVRFID0gMTM2LFxcbitcXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTUFYX05VTVxcbit9O1xcbitcXG4rZW51bSBtdDc5MjVfbWliX2NvdW50ZXIge1xcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfRkNTX0VSUiA9IDAsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XID0gMSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX01QRFUgPSAyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQgPSAzLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfVE9UQUxfQllURSA9IDQsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9WQUxJRF9BTVBEVV9TRiA9IDUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9WQUxJRF9CWVRFID0gNixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0NIQU5ORUxfSURMRSA9IDcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9WRUNfRFJPUCA9IDgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9ERUxJTUlURVJfRkFJTCA9IDksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9WRUNfTUlTTUFUQ0ggPSAxMCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX01EUkRZID0gMTEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSA9IDEyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9MR19NSVhFRF9NRFJEWV9USU1FID0gMTMsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUUgPSAxNCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1BGX0RST1AgPSAxNSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0xFTl9NSVNNQVRDSCA9IDE2LFxcbitcXHRVTklfQ01EX01JQl9DTlRfUF9DQ0FfVElNRSA9IDE3LFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19DQ0FfVElNRSA9IDE4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FID0gMTksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9QX0VEX1RJTUUgPSAyMCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JDTl9UWCA9IDIxLFxcbitcXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMjBNSFogPSAyMixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzQwTUhaID0gMjMsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9CV184ME1IWiA9IDI0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMTYwTUhaID0gMjUsXFxuK1xcdFVOSV9DTURfUk1BQ19DTlRfT0JTU19BSVJUSU1FID0gMjYsXFxuK1xcdFVOSV9DTURfUk1BQ19DTlRfTk9OV0lGSV9BSVJUSU1FID0gMjcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9EVVJfQ05UID0gMjgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9EVVJfQ05UID0gMjksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CQV9DTlQgPSAzMCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX01BQzJQSFlfVFhfVElNRSA9IDMxLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT1VUX09GX1JBTkdFX0NPVU5UID0gMzIsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9JQkZfVFggPSAzMyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0VCRl9UWCA9IDM0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfTVVCRl9UWCA9IDM1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfVkhURkJLID0gMzYsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9CRl9IVEZCSyA9IDM3LFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfSEVGQksgPSAzOCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfVFhGQktfQkZQT0xMX1RSSSA9IDM5LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19UUkkgPSA0MCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfUlhfRkJLQ1FJID0gNDEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1JYX05EUCA9IDQyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfSUJGX1VQVCA9IDQzLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfRUJGX1VQVCA9IDQ0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQkZFRV9TUF9BQk9SVCA9IDQ1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UQl9MRU5fRVJSID0gNDYsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1RYRkJLX01VVEUgPSA0NyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfVE1BQ19BQk9SVCA9IDQ4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19DUEwgPSA0OSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfQ09BTlRfQkxLVFggPSA1MCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JGRUVfRkJLX1NFRyA9IDUxLFxcbitcXHRVTklfQ01EX01JQl9DTlRfTkFWX1RJTUUgPSA1MixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDEgPSA1MyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDAgPSA1NCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDMgPSA1NSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDIgPSA1NixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVCA9IDU3LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMV9SVFNfVFhfQ05UID0gNTgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MyX1JUU19UWF9DTlQgPSA1OSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzNfUlRTX1RYX0NOVCA9IDYwLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfUkVUUlkgPSA2MSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzFfUlRTX1JFVFJZID0gNjIsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MyX1JUU19SRVRSWSA9IDYzLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTM19SVFNfUkVUUlkgPSA2NCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfQkFfTUlTUyA9IDY1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMV9CQV9NSVNTID0gNjYsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MyX0JBX01JU1MgPSA2NyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzNfQkFfTUlTUyA9IDY4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCA9IDY5LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMV9BQ0tfRkFJTCA9IDcwLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMl9BQ0tfRkFJTCA9IDcxLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTM19BQ0tfRkFJTCA9IDcyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSA9IDczLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMV9GUkFNRV9SRVRSWSA9IDc0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMl9GUkFNRV9SRVRSWSA9IDc1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTM19GUkFNRV9SRVRSWSA9IDc2LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8yID0gNzcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MxX0ZSQU1FX1JFVFJZXzIgPSA3OCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzJfRlJBTUVfUkVUUllfMiA9IDc5LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTM19GUkFNRV9SRVRSWV8yID0gODAsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9BMV9TRUFSQ0ggPSA4MSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX0RST1BfTVBEVSA9IDgyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfVU5XQU5URUQgPSA4MyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX0ZDU19PSyA9IDg0LFxcbitcXHRVTklfQ01EX01JQl9DTlRfU1VfVFhfT0sgPSA4NSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0ZVTExfQlcgPSA4NixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0FVVE9fQlcgPSA4NyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0NDQV9TQU1QTEVfSURMRSA9IDg4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfQ0NBX1NBTVBMRV9BQ1RJVkUgPSA4OSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0NDQV9USU1FID0gOTAsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TXzIwQldfQ0NBX1RJTUUgPSA5MSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfNDBCV19DQ0FfVElNRSA9IDkyLFxcbitcXHRVTklfQ01EX01JQl9DTlRfU184MEJXX0NDQV9USU1FID0gOTMsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TXzE2MEJXX0NDQV9USU1FID0gOTQsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzBfRURfVElNRSA9IDk1LFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xX0VEX1RJTUUgPSA5NixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMl9FRF9USU1FID0gOTcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzNfRURfVElNRSA9IDk4LFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV180X0VEX1RJTUUgPSA5OSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfNV9FRF9USU1FID0gMTAwLFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV182X0VEX1RJTUUgPSAxMDEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzdfRURfVElNRSA9IDEwMixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfOF9FRF9USU1FID0gMTAzLFxcbitcXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV185X0VEX1RJTUUgPSAxMDQsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEwX0VEX1RJTUUgPSAxMDUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzExX0VEX1RJTUUgPSAxMDYsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEyX0VEX1RJTUUgPSAxMDcsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzEzX0VEX1RJTUUgPSAxMDgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzE0X0VEX1RJTUUgPSAxMDksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzE1X0VEX1RJTUUgPSAxMTAsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9CV18zMjBNSFogPSAxMTEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9ERExNVF9STkcwID0gMTEyLCAvKiBSbmcwflJuZzQgMTEyfjExNiAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8zID0gMTE3LCAvKiAxMTd+MTIwICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYID0gMTIxLCAvKiAxMjF+MTI0ICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYX0RBVEEgPSAxMjUsIC8qIDEyNX4xMjggKi9cXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfVFhfQllURSA9IDEyOSwgLyogMTI5fjEzMiAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT0tfQlNTMCA9IDEzMywgLyogMTMzfjEzNiAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQllURV9CU1MwID0gMTM3LCAvKiAxMzd+MTQwICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9EQVRBX0JTUzAgPSAxNDEsIC8qIDE0MX4xNDQgKi9cXG4rXFx0VU5JX0NNRF9NSUJfQ05UX01CU1MwX1RYX09LID0gMTQ1LCAvKiAxNDV+MTYwICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9NQlNTMF9UWF9CWVRFID0gMTYxLCAvKiAxNjF+MTc2ICovXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9PS19NQlNTMCA9IDE3NywgLyogMTc3fjE5MiAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfQllURV9NQlNTMCA9IDE5MywgLyogMTkzfjIwOCAqL1xcbitcXHRVTklfQ01EX01JQl9DTlRfQU1QRFUgPSAyMDksXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9NUERVID0gMjEwLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfQUNLRUQgPSAyMTEsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9NQVhfTlVNXFxuK307XFxuK1xcbitlbnVtIEVOVU1fVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUcge1xcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CQVNJQyA9IDAsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1NUQSA9IDIsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JVR19SRVBPUlQgPSAzLFxcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19FTUxfU1RBVFMgPSA2LFxcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19SRUdVTEFSX1NUQVRTID0gNyxcXG4rXFx0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX0xJTktfUVVBTElUWSA9IDgsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0dFVF9NTF9DSE5MX0NPTkQgPSA5LFxcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19TVEFUX1dUQkwgPSAxMCxcXG4rXFx0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19MQVlFUl9TVEFUUyA9IDB4ODAsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1BQRFVfTEFURU5DWSxcXG4rXFx0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQ1VSUkVOVF9UWF9SQVRFLFxcbitcXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CRUFDT05fUkVQT1JUID0gMHg4NixcXG4rXFx0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQlNTX0NVUlJFTlRfVFhfUkFURSA9IDB4ODcsXFxuK1xcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JTU19QUkVEX1RYX0JJVFJBVEUgPSAweDg4LFxcbit9O1xcbitcXG4gI2RlZmluZSBVTklfV09XX0RFVEVDVF9UWVBFX01BR0lDXFx0XFx0QklUKDApXFxuICNkZWZpbmUgVU5JX1dPV19ERVRFQ1RfVFlQRV9BTllcXHRcXHRcXHRCSVQoMSlcXG4gI2RlZmluZSBVTklfV09XX0RFVEVDVF9UWVBFX0RJU0NPTk5FQ1RcXHRcXHRCSVQoMilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVxcbmluZGV4IGY5ZGNjMGJiYTM5M2MuLjM4NjNhODliODk3NDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVxcbkBAIC00LDcgKzQsNyBAQCBvYmotJChDT05GSUdfTVQ3OTI1X0NPTU1PTikgKz0gbXQ3OTI1LWNvbW1vbi5vXFxuIG9iai0kKENPTkZJR19NVDc5MjVFKSArPSBtdDc5MjVlLm9cXG4gb2JqLSQoQ09ORklHX01UNzkyNVUpICs9IG10NzkyNXUub1xcbiBcXG4tbXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xcbittdDc5MjUtY29tbW9uLXkgOj0gbWFjLm8gbWN1Lm8gcmVnZC5vIG1haW4ubyBpbml0Lm8gZGVidWdmcy5vIG5hbi5vIHN0YXRzLm9cXG4gbXQ3OTI1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXFxuIG10NzkyNWUteSA6PSBwY2kubyBwY2lfbWFjLm8gcGNpX21jdS5vXFxuIG10NzkyNXUteSA6PSB1c2Iub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcXG5pbmRleCBkMDFmZjQ5ZGU0N2FmLi43YTQwZDVhYzQ3ZGFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xcbkBAIC0xLDggKzEsMTEgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjMgTWVkaWFUZWsgSW5jLiAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hdGg2NC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcIm10NzkyNS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibWN1LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdGF0cy5oXFxcIlxcbiBcXG4gc3RhdGljIGludFxcbiBtdDc5MjVfcmVnX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbkBAIC0yODYsNiArMjg5LDM0NiBAQCBzdGF0aWMgaW50IG10NzkyNV9jaGlwX3Jlc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuIFxcbiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsIFxcXCIlbGxkXFxcXG5cXFwiKTtcXG4gXFxuK3N0YXRpYyBjb25zdCB1MzIgc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzW10gPSB7XFxuK1xcdFVOSV9DTURfTUlCX0NOVF9SWF9GQ1NfRVJSLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfRklGT19PVkVSRkxPVyxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX01QRFUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1BGX0RST1AsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9DSEFOTkVMX0lETEUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9MR19NSVhFRF9NRFJEWV9USU1FLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxcbitcXHRVTklfQ01EX01JQl9DTlRfUF9DQ0FfVElNRSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1NfQ0NBX1RJTUUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9QX0VEX1RJTUUsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9CQ05fVFgsXFxuK1xcdFVOSV9DTURfTUlCX0NOVF9UWF9CV180ME1IWixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaLFxcbitcXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMTYwTUhaLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9CQV9NSVNTLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMixcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQlNTMF9BQ0tfRkFJTCxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0FNUERVLFxcbitcXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSxcXG4rXFx0VU5JX0NNRF9NSUJfQ05UX0FNUERVX0FDS0VELFxcbit9O1xcbitcXG4rLyogRHVtcCB0aGUgd2hvbGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIGFuZCBtYXJrIHRoZSBlbnRyeSBjdXJyZW50bHkgaW4gdXNlXFxuKyAqIHdpdGggXFxcIi0tXFx1MDAzZVxcXCJcXG4rICovXFxuK3N0YXRpYyB2b2lkXFxuK210NzkyNV9kdW1wX2F1dG9fcmF0ZV90YWJsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IpXFxuK3tcXG4rXFx0dTggZmNhcCA9IHdyLVxcdTAwM2VmY2FwO1xcbitcXHR1OCByYXRlX2lkeCA9IHdyLVxcdTAwM2VyYXRlX2lkeDtcXG4rXFx0dTggY2JybiA9IHdyLVxcdTAwM2VjYnJuO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBDdXIgUmF0ZSBJbmRleCA9ICV1XFxcXG5cXFwiLCBcXFwiIFxcXCIsIHJhdGVfaWR4KTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVDc5MjVfQVVUT19SQVRFX05VTTsgaSsrKSB7XFxuK1xcdFxcdHUxNiByYXRlX2NvZGUgPSBsZTE2X3RvX2NwdSh3ci1cXHUwMDNlcmF0ZV9jb2RlW2ldKTtcXG4rXFx0XFx0dTggdHhtb2RlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTU9ERShyYXRlX2NvZGUpO1xcbitcXHRcXHR1OCByYXRlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTUNTKHJhdGVfY29kZSk7XFxuK1xcdFxcdHU4IG5zdHMgPSBNVDc5MjVfSFdfUkFURV9UT19OU1MocmF0ZV9jb2RlKSArIDE7XFxuK1xcdFxcdHU4IHN0YmMgPSBNVDc5MjVfSFdfUkFURV9UT19TVEJDKHJhdGVfY29kZSk7XFxuK1xcdFxcdHU4IGRjbSA9IE1UNzkyNV9IV19SQVRFX1RPX0RDTShyYXRlX2NvZGUpO1xcbitcXHRcXHR1OCBlcnN1MTA2dCA9IE1UNzkyNV9IV19SQVRFX1RPXzEwNlQocmF0ZV9jb2RlKTtcXG4rXFx0XFx0dTggc2dpID0gbXQ3OTI1X3d0YmxfZ2V0X3NnaSh3ciwgdHhtb2RlLCBmY2FwKTtcXG4rXFx0XFx0dTggbGRwYyA9IG10NzkyNV93dGJsX2dldF9sZHBjKHdyLCB0eG1vZGUpO1xcbitcXHRcXHRjb25zdCBjaGFyICptb2RlX3N0ciA9IFxcXCJOL0FcXFwiO1xcbitcXG4rXFx0XFx0aWYgKGRjbSlcXG4rXFx0XFx0XFx0cmF0ZSA9IE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XFxuK1xcdFxcdGlmIChlcnN1MTA2dClcXG4rXFx0XFx0XFx0cmF0ZSA9IE1UNzkyNV9IV19SQVRFX1VOTUFTS18xMDZUKHJhdGUpO1xcbitcXG4rXFx0XFx0aWYgKHR4bW9kZSBcXHUwMDNjIEFSUkFZX1NJWkUobXQ3OTI1X3R4X21vZGVfc3RyKSlcXG4rXFx0XFx0XFx0bW9kZV9zdHIgPSBtdDc5MjVfdHhfbW9kZV9zdHJbdHhtb2RlXTtcXG4rXFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIlJhdGUgaW5kZXhbJWRdICAgICVzXFxcIiwgaSxcXG4rXFx0XFx0XFx0ICAgcmF0ZV9pZHggPT0gaSA/IFxcXCItLVxcdTAwM2UgXFxcIiA6IFxcXCIgICAgXFxcIik7XFxuK1xcbitcXHRcXHQvKiByYXRlL01DUyBmaWVsZCAqL1xcbitcXHRcXHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltyYXRlIFxcdTAwMjYgMHgzXSk7XFxuK1xcdFxcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXFxuK1xcdFxcdFxcdHNlcV9wcmludGYocywgXFxcIiVzLCBcXFwiLCBtdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cihyYXRlKSk7XFxuK1xcdFxcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XFxuK1xcdFxcdFxcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGKVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCJNQ1MlZCwgXFxcIiwgcmF0ZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMlZF9NQ1MlZCwgXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc3RiYyA/IFxcXCJOU1RTXFxcIiA6IFxcXCJOU1NcXFwiLCBuc3RzLCByYXRlKTtcXG4rXFxuK1xcdFxcdC8qIGJhbmR3aWR0aDogbWlycm9yIHRoZSBDQ0svT0ZETSAtXFx1MDAzZSBCVzIwIGFuZCBjYnJuIGhhbmRsaW5nICovXFxuK1xcdFxcdGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHxcXG4rXFx0XFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXFxuK1xcdFxcdFxcdHNlcV9wcmludGYocywgXFxcIiVzLCBcXFwiLCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbMF0pO1xcbitcXHRcXHRlbHNlIGlmIChpIFxcdTAwM2UgY2JybilcXG4rXFx0XFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMsIFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGZjYXAgXFx1MDAzYyA1ID9cXG4rXFx0XFx0XFx0XFx0ICAgKGZjYXAgXFx1MDAzZSBNVDc5MjVfQldfMjAgP1xcbitcXHRcXHRcXHRcXHQgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXAgLSAxXSA6XFxuK1xcdFxcdFxcdFxcdCAgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0pIDpcXG4rXFx0XFx0XFx0XFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZmNhcCBcXHUwMDNjIDUgPyBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0gOlxcbitcXHRcXHRcXHRcXHQgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbNV0pO1xcbitcXG4rXFx0XFx0LyogR0kgLyBwcmVhbWJsZSAqL1xcbitcXHRcXHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIiwgcmF0ZSBcXHUwMDNjIDQgPyBcXFwiTFBcXFwiIDogXFxcIlNQXFxcIik7XFxuK1xcdFxcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXFxuK1xcdFxcdFxcdDsgLyogT0ZETSBoYXMgbm8gR0kvcHJlYW1ibGUgdG8gcHJpbnQgKi9cXG4rXFx0XFx0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHxcXG4rXFx0XFx0XFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YgfHxcXG4rXFx0XFx0XFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCB8fFxcbitcXHRcXHRcXHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfUExSKVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIiwgc2dpID09IDAgPyBcXFwiTEdJXFxcIiA6IFxcXCJTR0lcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc2dpID09IDAgPyBcXFwiU0dJXFxcIiA6XFxuK1xcdFxcdFxcdFxcdCAgIChzZ2kgPT0gMSA/IFxcXCJNR0lcXFwiIDogXFxcIkxHSVxcXCIpKTtcXG4rXFxuK1xcdFxcdC8qIG1vZGUsIERDTSwgMTA2dCwgU1RCQywgY29kaW5nICovXFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiVzJXMlcyVzJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG1vZGVfc3RyLFxcbitcXHRcXHRcXHQgICBkY20gPyBcXFwiLCBEQ01cXFwiIDogXFxcIlxcXCIsIGVyc3UxMDZ0ID8gXFxcIiwgMTA2dFxcXCIgOiBcXFwiXFxcIixcXG4rXFx0XFx0XFx0ICAgc3RiYyA/IFxcXCIsIFNUQkMsIFxcXCIgOiBcXFwiLCBcXFwiLFxcbitcXHRcXHRcXHQgICAobGRwYyA9PSAwIHx8XFxuK1xcdFxcdFxcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0sgfHxcXG4rXFx0XFx0XFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pID9cXG4rXFx0XFx0XFx0ICAgXFxcIkJDQ1xcXCIgOiBcXFwiTERQQ1xcXCIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXQ3OTJ4X3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzOCByc3NpID0gMDtcXG4rXFx0dTggYmFuZF9pZHggPSAwO1xcbitcXHRib29sIHd0YmxfcmF0ZV92YWxpZCA9IGZhbHNlO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IGkgPSAwO1xcbitcXHR1MzIgc3RhdHNfdmFsdWUgPSAwO1xcbitcXHR1MzIgdHhfbGlua19zcGVlZF9rYnBzID0gMDtcXG4rXFx0dTY0IHR4X3RvdGFsID0gMDtcXG4rXFx0dTY0IHR4X2ZhaWwgPSAwO1xcbitcXHR1NjQgdHhfcGVyID0gMDtcXG4rXFx0dTMyIHR4X3Blcl9yZW0gPSAwO1xcbitcXHQvKiBVTklfQ01EX01JQl9EQVRBICovXFxuK1xcdHU2NCBtaWJfdmFsdWVzW0FSUkFZX1NJWkUoc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzKV07XFxuK1xcdHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy1cXHUwMDNlcHJpdmF0ZSk7XFxuK1xcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHd0YmxfcmF0ZTtcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHMgKnN0YXRzID0gTlVMTDtcXG4rXFxuK1xcdGJhbmRfaWR4ID0gZGV2LVxcdTAwM2VtcGh5LmJhbmRfaWR4O1xcbitcXG4rXFx0IHN0YXRzID0ga3phbGxvYyhzaXplb2YoKnN0YXRzKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3RhdHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0LyogR2V0IFNUQV9TVEFUUyAqL1xcbitcXHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xcbitcXHRyZXQgPSBtdDc5MnhfbWN1X2dldF9zdGF0KGRldiwgc3RhdHMpO1xcbitcXHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEdldCBNSUJfU1RBVFMgKi9cXG4rXFx0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcXG4rXFx0cmV0ID0gbXQ3OTI1X21jdV9nZXRfbWliX2luZm8oZGV2LCBiYW5kX2lkeCwgc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICBBUlJBWV9TSVpFKHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyksIG1pYl92YWx1ZXMpO1xcbitcXHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEdldCBMaW5rX1NwZWVkIGFuZCBSU1NJICovXFxuK1xcdG10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7XFxuK1xcdHJldCA9IG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eShkZXYsIHN0YXRzLVxcdTAwM2Vic3NfaWR4LCBcXHUwMDI2cnNzaSwgXFx1MDAyNnR4X2xpbmtfc3BlZWRfa2Jwcyk7XFxuK1xcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogR2V0IHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgKGJlc3QgZWZmb3J0OyBkbyBub3QgYWJvcnQgdGhlXFxuK1xcdCAqIHdob2xlIHN0YXRzIGR1bXAgaWYgdGhlIFdUQkwgcXVlcnkgaXMgbm90IGF2YWlsYWJsZSkuXFxuK1xcdCAqL1xcbitcXHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xcbitcXHRpZiAoIW10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZShkZXYsIHN0YXRzLVxcdTAwM2V3dGJsX2lkeCwgXFx1MDAyNnd0YmxfcmF0ZSkpXFxuK1xcdFxcdHd0YmxfcmF0ZV92YWxpZCA9IHRydWU7XFxuK1xcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XFxuK1xcbitcXHQvKiBQcmludCBTVEFfU1RBVFMgaW5mbyAqL1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIoU1RBKSBjb25uZWN0ZWQgQVAgTUFDIEFkZHJlc3MgPSAlcE1cXFxcblxcXCIsIHN0YXRzLVxcdTAwM2VtYWNfYWRkcik7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBCc3NJZHggPSBbJXVdXFxcXG5cXFwiLCBcXFwiIFxcXCIsIHN0YXRzLVxcdTAwM2Vic3NfaWR4KTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFN0YVJlY0lkeCA9IFsldV1cXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgc3RhdHMtXFx1MDAzZXN0YV9pZHgpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUlNTSSA9ICVkXFxcXG5cXFwiLCBcXFwiIFxcXCIsIHJzc2kpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgTGlua19TcGVlZCA9ICV1IChrYml0L3MpXFxcXG5cXFwiLCBcXFwiIFxcXCIsIHR4X2xpbmtfc3BlZWRfa2Jwcyk7XFxuK1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgdGVtcGVyYXR1cmUgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNldGVtcGVyYXR1cmUpO1xcbitcXG4rXFx0c3RhdHNfdmFsdWUgPSBsZTMyX3RvX2NwdShzdGF0cy1cXHUwMDNldHJhbnNtaXRfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXFx1MDAzZXRyYW5zbWl0X2ZhaWxfY291bnQpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgVHggc3VjY2VzcyA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIHN0YXRzX3ZhbHVlKTtcXG4rXFxuK1xcdHN0YXRzX3ZhbHVlID0gbGUzMl90b19jcHUoc3RhdHMtXFx1MDAzZXR4X2ZhaWxfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXFx1MDAzZXR4X2xpZmVfdGltZW91dF9jb3VudCk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBUeCBmYWlsIHRvIFJjdiBBQ0sgYWZ0ZXIgcmV0cnkgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0c192YWx1ZSk7XFxuK1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggTXBkdSA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VtaWJbYmFuZF9pZHhdLnJ4X21wZHVfY250KSk7XFxuK1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggRmNzIEVycm9yID0gJXUgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VtaWJbYmFuZF9pZHhdLmZjc19lcnJvcikpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggRklGTyBmdWxsID0gJXUgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VtaWJbYmFuZF9pZHhdLnJ4X2ZpZm9fZnVsbCkpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU07IGkrKylcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFRSWF9BR0dfUkFOR0VbJWRdID0gJXUgKFBQRFUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBcXFwiIFxcXCIsIGksIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VtaWJbYmFuZF9pZHhdLnR4X3JhbmdlX2FtcGR1X2NudFtpXSkpO1xcbitcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCA9ICV1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTMyX3RvX2NwdShzdGF0cy1cXHUwMDNlbWliW2JhbmRfaWR4XS5hbXBkdV90eF9zZl9jbnQpKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCB3aXRoIEFDSyByZXBseSA9ICV1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTMyX3RvX2NwdShzdGF0cy1cXHUwMDNlbWliW2JhbmRfaWR4XS5hbXBkdV90eF9hY2tfc2ZfY250KSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICByYXRlMV90eF9jbnQgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTMyX3RvX2NwdShzdGF0cy1cXHUwMDNlcmF0ZTFfdHhfY250KSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICByYXRlMV9mYWlsX2NudCA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVxcdTAwM2VyYXRlMV9mYWlsX2NudCkpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgdHJhaW5fdXAgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTE2X3RvX2NwdShzdGF0cy1cXHUwMDNldHJhaW5fdXApKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIHRyYWluX2Rvd24gPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBsZTE2X3RvX2NwdShzdGF0cy1cXHUwMDNldHJhaW5fZG93bikpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgaXNfZm9yY2VfdHhfc3RyZWFtID0gJXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgc3RhdHMtXFx1MDAzZWlzX2ZvcmNlX3R4X3N0cmVhbSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBpc19mb3JjZV9zZV9vZmYgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlaXNfZm9yY2Vfc2Vfb2ZmKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIG1heF9hbXBkdV9mYWN0b3IgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlbWF4X2FtcGR1X2ZhY3Rvcik7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICB0eF9yYXRlX3VwX3BlbmFsdHkgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNldHhfcmF0ZV91cF9wZW5hbHR5KTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIGxvd190cmFmZmljX21vZGUgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlbG93X3RyYWZmaWNfbW9kZSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBsb3dfdHJhZmZpY19jb3VudCA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIHN0YXRzLVxcdTAwM2Vsb3dfdHJhZmZpY19jb3VudCk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBsb3dfdHJhZmZpY19kYXNoYm9hcmQgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlbG93X3RyYWZmaWNfZGFzaGJvYXJkKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIGR5bmFtaWNfc2dpX3N0YXRlID0gJXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgc3RhdHMtXFx1MDAzZWR5bmFtaWNfc2dpX3N0YXRlKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIGR5bmFtaWNfc2dpX3Njb3JlID0gJXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgc3RhdHMtXFx1MDAzZWR5bmFtaWNfc2dpX3Njb3JlKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIGR5bmFtaWNfYndfc3RhdGUgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNlZHluYW1pY19id19zdGF0ZSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSA9ICV1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIHN0YXRzLVxcdTAwM2VkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICB2aHRfbm9uX3NwX3JhdGVfc3RhdGUgPSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBzdGF0cy1cXHUwMDNldmh0X25vbl9zcF9yYXRlX3N0YXRlKTtcXG4rXFxuK1xcdC8qIERlY29kZSB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCB0byBzaG93IHRoZSBjdXJyZW50IFRYIE1DUyByYXRlICovXFxuK1xcdGlmIChiYW5kX2lkeCBcXHUwMDNjIE1UNzkyNV9TVEFfU1RBVFNfQkFORF9OVU0pXFxuK1xcdFxcdG10NzkyNV9wcmludF9sYXN0X3R4X3JhdGUocywgc3RhdHMtXFx1MDAzZXR4X3ZlY3RvcltiYW5kX2lkeF0udHh2KTtcXG4rXFxuK1xcdC8qIER1bXAgdGhlIHdob2xlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSBhbmQgbWFyayB0aGUgZW50cnkgY3VycmVudGx5ICovXFxuK1xcdGlmICh3dGJsX3JhdGVfdmFsaWQpXFxuK1xcdFxcdG10NzkyNV9kdW1wX2F1dG9fcmF0ZV90YWJsZShzLCBcXHUwMDI2d3RibF9yYXRlKTtcXG4rXFxuK1xcdHNlcV9wdXRzKHMsIFxcXCJcXFxcbm1pYiBzdGF0ZTpcXFxcblxcXCIpO1xcbitcXHQvKiA9PT1SeCBSZWxhdGVkIENvdW50ZXJzPT09ICovXFxuK1xcdHNlcV9wdXRzKHMsIFxcXCI9PT0gUnggUmVsYXRlZCBDb3VudGVycyA9PT1cXFxcblxcXCIpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggd2l0aCBDUkMgPSAlbGx1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfRkNTX0VSUl0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlID0gJWxsdSAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1ddKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFJ4IE1wZHUgPSAlbGx1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfTVBEVV0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggQU1wZHUgPSAlbGx1IChQUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfUlhfQ09VTlRdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFJ4IFBGIERyb3AgPSAlbGx1IChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUEZfRFJPUF0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUnggTGVuIE1pc21hdGNoID0gJWxsdSAoUFBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0xFTl9NSVNNQVRDSF0pO1xcbitcXG4rXFx0LyogPT09UGh5L1RpbWluZyBSZWxhdGVkIENvdW50ZXJzPT09ICovXFxuK1xcdHNlcV9wdXRzKHMsIFxcXCJcXFxcbj09PSBQaHkvVGltaW5nIFJlbGF0ZWQgQ291bnRlcnMgPT09XFxcXG5cXFwiKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIENoYW5uZWxJZGxlQ250ID0gJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBDQ0FfTkFWX1R4X1RpbWUgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFJ4X01EUkRZX0NOVCA9ICVsbHUgKFBQRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9NRFJEWV0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgQ0NLX01EUkRZID0gJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIE9GRE1fTURSRFkgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIE9GRE1fR1JFRU5fTURSRFkgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFByaW0gQ0NBIFRpbWUgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0NDQV9USU1FXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBTZWMgQ0NBIFRpbWUgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9TX0NDQV9USU1FXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBQcmltIEVEIFRpbWUgPSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0VEX1RJTUVdKTtcXG4rXFxuK1xcdC8qID09PVR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYyk9PT0gKi9cXG4rXFx0c2VxX3B1dHMocywgXFxcIlxcXFxuPT09IFR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYykgPT09XFxcXG5cXFwiKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIEJlYWNvblR4Q250ID0gJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQkNOX1RYXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBUeCA0ME1IeiBDbnQgPSAlbGx1ICAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1RYX0JXXzQwTUhaXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBUeCA4ME1IeiBDbnQgPSAlbGx1ICAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1RYX0JXXzgwTUhaXSk7XFxuK1xcdHNlcV9wcmludGYocywgXFxcIiUtMjJzICBUeCAxNjBNSHogQ250ID0gJWxsdSAgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9UWF9CV18xNjBNSFpdKTtcXG4rXFxuK1xcdC8qID09PUJTU0lEWzBdIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi9cXG4rXFx0c2VxX3B1dHMocywgXFxcIlxcXFxuPT09IEJTU0lEWzBdIFJlbGF0ZWQgQ291bnRlcnMgPT09XFxcXG5cXFwiKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIEJBIE1pc3MgQ250ID0gJWxsdSAgKFBQRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0JBX01JU1NdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFJUUyBUeCBDbnQgPSAlbGx1ICAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1RYX0NOVF0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgRnJhbWUgUmV0cnkgQ250ID0gJWxsdSAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUlldKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIEZyYW1lIFJldHJ5IDIgQ250ID0gJWxsdSAoTVBEVSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgIFxcXCIgXFxcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMl0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgUlRTIFJldHJ5IENudCA9ICVsbHUgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX1JUU19SRVRSWV0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgQWNrIEZhaWxlZCBDbnQgPSAlbGx1IChQUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9BQ0tfRkFJTF0pO1xcbitcXG4rXFx0LyogPT09QU1QRFUgUmVsYXRlZCBDb3VudGVycz09PSAqL1xcbitcXHRzZXFfcHV0cyhzLCBcXFwiXFxcXG49PT0gQU1QRFUgUmVsYXRlZCBDb3VudGVycyA9PT1cXFxcblxcXCIpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgVHggQU1QRFVfUGt0X0NudCA9ICVsbHUgIChQUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVdKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIFR4IEFNUERVX01QRFVfUGt0X0NudCA9ICVsbHUgIChNUERVKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV0pO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgQU1QRFUgVHggc3VjY2VzcyA9ICVsbHUgKE1QRFUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF0pO1xcbitcXG4rXFx0dHhfdG90YWwgPSBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV07XFxuK1xcdHR4X2ZhaWwgPSAgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0FNUERVX01QRFVdIC0gbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0FNUERVX0FDS0VEXTtcXG4rXFx0dHhfcGVyID0gdHhfdG90YWwgPT0gMCA/IDAgOiBkaXY2NF91NjQoMTAwMCAqIHR4X2ZhaWwsIHR4X3RvdGFsKTtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgIEFNUERVIFR4IGZhaWwgY291bnQgICA9ICVsbHUgIChNUERVKSwgUEVSPSVsbHUuJTFsbHUlJVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiBcXFwiLFxcbitcXHRcXHQgICB0eF9mYWlsLFxcbitcXHRcXHQgICBkaXZfdTY0X3JlbSh0eF9wZXIsIDEwLCBcXHUwMDI2dHhfcGVyX3JlbSksICh1NjQpdHhfcGVyX3JlbSk7XFxuK1xcbitvdXQ6XFxuK1xcdGtmcmVlKHN0YXRzKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkaXI7XFxuQEAgLTMxMyw1ICs2NTYsOCBAQCBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbiBcXHRcXHRcXHRcXHQgICAgbXQ3OTJ4X3BtX3N0YXRzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZGVlcC1zbGVlcFxcXCIsIDA2MDAsIGRpciwgZGV2LCBcXHUwMDI2Zm9wc19kcyk7XFxuIFxcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LVxcdTAwM2VtdDc2LmRldiwgXFxcInN0YXRzXFxcIiwgZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgbXQ3OTJ4X3N0YXRzKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YTQ3OTUzMDYyYmMzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmNcXG5AQCAtMCwwICsxLDU4NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuKy8qIENvcHlyaWdodCAoQykgMjAyNiBNZWRpYVRlayBJbmMuICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJtdDc5MjUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm1jdS5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWFjLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdGF0cy5oXFxcIlxcbitcXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1ZFUlNJT04gMVxcbisjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfVkFMSUQgMVVcXG4rXFxuKyNkZWZpbmUgTVQ3OTI1X01JQl9NQVhfQ05UXFx0XFx0XFx0MzJcXG4rI2RlZmluZSBNVDc5MjVfTUlCX0NOVF9NQVhfTlVNXFx0XFx0NTEyICAvKiBmaXJtd2FyZSBVTklfQ01EX01JQl9DTlRfTUFYX05VTSB1cHBlciBib3VuZCAqL1xcbitcXG4rI2RlZmluZSBNVDc5MjVfTFFfQkFORF9OVU1cXHQ0XFx0XFx0XFx0LyogTGluayBxdWFsaXR5IGJhbmQgKi9cXG4rXFxuK2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfbW9kZV9zdHJbXSA9IHtcXG4rXFx0XFxcIkNDS1xcXCIsIFxcXCJPRkRNXFxcIiwgXFxcIk1NXFxcIiwgXFxcIkdGXFxcIiwgXFxcIlZIVFxcXCIsIFxcXCJQTFJcXFwiLFxcbitcXHRcXFwiUExSUFxcXCIsIFxcXCJBTFJcXFwiLCBcXFwiSEVfU1VcXFwiLCBcXFwiSEVfRVJcXFwiLCBcXFwiSEVfVFJJR1xcXCIsIFxcXCJIRV9NVVxcXCIsXFxuK1xcdFxcXCJFSFRfRVJcXFwiLCBcXFwiVE9GXFxcIiwgXFxcIkVIVF9UUklHXFxcIiwgXFxcIkVIVF9NVVxcXCJcXG4rfTtcXG4rXFxuK2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW10gPSB7XFxuK1xcdFxcXCIxTVxcXCIsIFxcXCIyTVxcXCIsIFxcXCI1LjVNXFxcIiwgXFxcIjExTVxcXCIsIFxcXCJOL0FcXFwiXFxuK307XFxuK1xcbitjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW10gPSB7XFxuK1xcdFxcXCJCVzIwXFxcIiwgXFxcIkJXNDBcXFwiLCBcXFwiQlc4MFxcXCIsIFxcXCJCVzE2MC9CVzgwODBcXFwiLCBcXFwiQlczMjBcXFwiLCBcXFwiTi9BXFxcIlxcbit9O1xcbitcXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfcmVxIHtcXG4rXFx0dTggcnN2WzRdO1xcbitcXHRfX2xlMTYgdGFnO1xcbitcXHRfX2xlMTYgbGVuO1xcbitcXHR1OCBzdGFfcmVjX2lkeDtcXG4rXFx0dTggcnN2MTtcXG4rXFx0dTggbGxzX3JlYWRfY2xlYXI7XFxuK1xcdHU4IHJlc2V0X2NvdW50ZXI7XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19ldmVudCB7XFxuK1xcdHU4IHJzdls0XTtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHMgc3RhdHM7XFxuK30gX19wYWNrZWQ7XFxuK1xcbisvKiBXVEJMIGF1dG8tcmF0ZSByZXF1ZXN0IFRMViwgbWlycm9yIEdlbjRtIHN0cnVjdCBVTklfQ01EX1NUQVRfV1RCTC5cXG4rICogVGhlIFJBIHRhZyByZXVzZXMgVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgKDEwKS5cXG4rICovXFxuK3N0cnVjdCBtdDc5MjVfd3RibF9yYXRlX3JlcSB7XFxuK1xcdHU4IHJzdls0XTtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0X19sZTE2IHdsYW5faWR4O1xcbitcXHRfX2xlMTYgcnN2MTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIFdUQkwgYXV0by1yYXRlIGV2ZW50IFRMVi4gRmlybXdhcmUgYW5zd2VycyBjbWQgdGFnIDEwIHdpdGggZXZlbnQgdGFnIDEyLiAqL1xcbitzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZV9ldmVudCB7XFxuK1xcdHU4IHJzdls0XTtcXG4rXFx0c3RydWN0IG10NzkyNV93dGJsX3JhdGUgcmF0ZTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIGZpeGVkIGZpZWxkLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9JTkZPICovXFxuK3N0cnVjdCBtdDc5MjVfbWliX2hkciB7XFxuK1xcdHU4IGJhbmRfaWR4O1xcbitcXHR1OCByc3ZbM107XFxuK30gX19wYWNrZWQ7XFxuK1xcbisvKiBPbmUgcmVxdWVzdGVkL3JldHVybmVkIE1JQiBjb3VudGVyLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBX1QuICovXFxuK3N0cnVjdCBtdDc5MjVfbWliX2RhdGEge1xcbitcXHRfX2xlMTYgdGFnO1xcdC8qIFVOSV8oQ01EfEVWRU5UKV9NSUJfREFUQSA9IDAgKi9cXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0X19sZTMyIGNvdW50ZXI7XFx0LyogTUlCIGNvdW50ZXIgSUQgKGVudW0gbXQ3OTI1X21pYl9jb3VudGVyKSAqL1xcbitcXHRfX2xlNjQgZGF0YTtcXHQvKiBvbmx5IHZhbGlkIG9uIGV2ZW50OyBpZ25vcmVkIG9uIGNtZCAqL1xcbit9IF9fcGFja2VkO1xcbitcXG4rLyogcGVyLWJhbmQgbGluayBxdWFsaXR5IGVudHJ5LCBtaXJyb3IgVU5JX0xJTktfUVVBTElUWSAqL1xcbitzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSB7XFxuK1xcdHM4IHJzc2k7XFx0XFx0LyogbW92aW5nLWF2ZXJhZ2UgYmVhY29uIFJTU0kgb2YgY29ubmVjdGVkIEFQICovXFxuK1xcdHM4IGxpbmtfcXVhbGl0eTtcXHQvKiBhbHdheXMgMCAqL1xcbitcXHRfX2xlMTYgbGlua19zcGVlZDtcXHQvKiBUWCByYXRlMSwgdW5pdCA1MDAgS2IvcyAqL1xcbitcXHR1OCBtZWRpdW1fYnVzeV9wY3Q7XFx0LyogYWx3YXlzIDAgKi9cXG4rXFx0dTggaXNfcmVhZHk7XFx0XFx0LyogMDogZmllbGRzIGludmFsaWQsIDE6IHZhbGlkICovXFxuK1xcdHU4IHJzdlsyXTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIHJlcXVlc3QgVExWLCBtaXJyb3IgVU5JX0NNRF9MSU5LX1FVQUxJVFkgKGhlYWRlciArIHRhZy9sZW4gb25seSkgKi9cXG4rc3RydWN0IG10NzkyNV9scV9yZXEge1xcbitcXHR1OCByc3ZbNF07XFx0XFx0LyogVU5JX0NNRF9HRVRfU1RBVElTVElDUyBmaXhlZCBmaWVsZCAqL1xcbitcXHRfX2xlMTYgdGFnO1xcdFxcdC8qIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEgKi9cXG4rXFx0X19sZTE2IGxlbjtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIGV2ZW50IFRMViwgbWlycm9yIFVOSV9FVkVOVF9MSU5LX1FVQUxJVFkgKi9cXG4rc3RydWN0IG10NzkyNV9scV9ldmVudCB7XFxuK1xcdHU4IHJzdls0XTtcXHRcXHQvKiBVTklfRVZFTlRfU1RBVElTVElDUyBmaXhlZCBmaWVsZCAqL1xcbitcXHRfX2xlMTYgdGFnO1xcdFxcdC8qIFVOSV9FVkVOVF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSA9IDEgKi9cXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0c3RydWN0IG10NzkyNV9saW5rX3F1YWxpdHkgbHFbTVQ3OTI1X0xRX0JBTkRfTlVNXTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0YXRpYyB2b2lkXFxuK210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHhfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4re1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwICpsb29rdXAgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgbXQ3OTJ4X3ZpZiAqbXZpZjtcXG4rXFx0c3RydWN0IG10NzkyeF9zdGEgKm1zdGE7XFxuK1xcbitcXHRpZiAobG9va3VwLVxcdTAwM2VzdGFfcmVjX2lkeCBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAodmlmLVxcdTAwM2V0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwgIXZpZi1cXHUwMDNlY2ZnLmFzc29jKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtdmlmID0gKHN0cnVjdCBtdDc5MnhfdmlmICopdmlmLVxcdTAwM2VkcnZfcHJpdjtcXG4rXFx0bXN0YSA9IG12aWYtXFx1MDAzZXdlcF9zdGE7XFxuK1xcdGlmICghbXN0YSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFtc3RhLVxcdTAwM2VkZWZsaW5rLndjaWQuc3RhKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRsb29rdXAtXFx1MDAzZXN0YV9yZWNfaWR4ID0gbXN0YS1cXHUwMDNlZGVmbGluay53Y2lkLmlkeDtcXG4rfVxcbitcXG4raW50XFxuK210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggKnN0YV9yZWNfaWR4KVxcbit7XFxuK1xcdHN0cnVjdCBtdDc5MjVfc3RhX3JlY19sb29rdXAgbG9va3VwID0ge1xcbitcXHRcXHQuc3RhX3JlY19pZHggPSAtMSxcXG4rXFx0fTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRldi1cXHUwMDNlbXQ3Ni5tdXRleCk7XFxuK1xcbitcXHRpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhkZXYtXFx1MDAzZW1waHkuaHcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9SRVNVTUVfQUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeF9pdGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxvb2t1cCk7XFxuK1xcbitcXHRpZiAobG9va3VwLnN0YV9yZWNfaWR4IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9UQ09OTjtcXG4rXFxuK1xcdGlmIChsb29rdXAuc3RhX3JlY19pZHggXFx1MDAzZSBVOF9NQVgpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0KnN0YV9yZWNfaWR4ID0gbG9va3VwLnN0YV9yZWNfaWR4O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIERlY29kZSB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCBhbmQgcHJpbnQgdGhlIGxhc3QgVFggcmF0ZSAqL1xcbit2b2lkXFxuK210NzkyNV9wcmludF9sYXN0X3R4X3JhdGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBfX2xlMzIgbGVfdHh2WzNdKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm1vZGVfc3RyID0gXFxcIk4vQVxcXCI7XFxuK1xcdHU4IHJhdGUsIHR4bW9kZSwgZnJtb2RlLCBzZ2ksIGxkcGMsIG5zdHMsIHN0YmMsIHNwZSwgZGNtLCBlcnN1MTA2dDtcXG4rXFx0czggdHhwd3IsIHBvc190eHB3cjtcXG4rXFx0dTMyIHR4dlszXTtcXG4rXFxuK1xcdHR4dlswXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlswXSk7XFxuK1xcdHR4dlsxXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsxXSk7XFxuK1xcdHR4dlsyXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlsyXSk7XFxuK1xcbitcXHRpZiAodHh2WzBdID09IDB4ZmZmZmZmZmYpIHtcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgICVzID0gJXNcXFxcblxcXCIsIFxcXCIgXFxcIiwgXFxcIkxhc3QgVFggUmF0ZVxcXCIsIFxcXCJOL0FcXFwiKTtcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgICVzID0gJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIFxcXCIgXFxcIiwgXFxcIkNoaXAgT3V0IFRYIFBvd2VyXFxcIiwgXFxcIk4vQVxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHJhdGUgPSBNVDc5MjVfVFhWX0dFVF9UWF9SQVRFKHR4dik7XFxuK1xcdHR4bW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX01PREUodHh2KTtcXG4rXFx0ZnJtb2RlID0gTVQ3OTI1X1RYVl9HRVRfVFhfRlJNT0RFKHR4dik7XFxuK1xcdG5zdHMgPSBNVDc5MjVfVFhWX0dFVF9UWF9OU1RTKHR4dikgKyAxO1xcbitcXHRzZ2kgPSBNVDc5MjVfVFhWX0dFVF9UWF9TR0kodHh2KTtcXG4rXFx0bGRwYyA9IE1UNzkyNV9UWFZfR0VUX1RYX0xEUEModHh2KTtcXG4rXFx0c3RiYyA9IE1UNzkyNV9UWFZfR0VUX1RYX1NUQkModHh2KTtcXG4rXFx0dHhwd3IgPSBNVDc5MjVfVFhWX0dFVF9UWF9QV1IodHh2KTtcXG4rXFx0c3BlID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1BFX0lEWCh0eHYpO1xcbitcXHRkY20gPSBNVDc5MjVfVFhWX0dFVF9UWF9EQ00odHh2KTtcXG4rXFx0ZXJzdTEwNnQgPSBNVDc5MjVfVFhWX0dFVF9UWF8xMDZUKHR4dik7XFxuK1xcbitcXHRpZiAoZGNtKVxcbitcXHRcXHRyYXRlID0gTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XFxuK1xcdGlmIChlcnN1MTA2dClcXG4rXFx0XFx0cmF0ZSA9IE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfMTA2VChyYXRlKTtcXG4rXFxuK1xcdGlmICh0eG1vZGUgXFx1MDAzYyBBUlJBWV9TSVpFKG10NzkyNV90eF9tb2RlX3N0cikpXFxuK1xcdFxcdG1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07XFxuK1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlLTIycyAgJXMgPSBcXFwiLCBcXFwiIFxcXCIsIFxcXCJMYXN0IFRYIFJhdGVcXFwiKTtcXG4rXFxuK1xcdC8qIHJhdGUvTUNTIGZpZWxkICovXFxuK1xcdGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9DQ0spXFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiVzLCBcXFwiLFxcbitcXHRcXHRcXHQgICByYXRlIFxcdTAwM2MgNCA/IG10NzkyNV90eF9yYXRlX2Nja19zdHJbcmF0ZV0gOlxcbitcXHRcXHRcXHQgICAoKChyYXRlIFxcdTAwM2U9IDUpIFxcdTAwMjZcXHUwMDI2IChyYXRlIFxcdTAwM2M9IDcpKSA/XFxuK1xcdFxcdFxcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGUgLSA0XSA6XFxuK1xcdFxcdFxcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyWzRdKSk7XFxuK1xcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX09GRE0pXFxuK1xcdFxcdHNlcV9wcmludGYocywgXFxcIiVzLCBcXFwiLCBtdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cihyYXRlKSk7XFxuK1xcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XFxuK1xcdFxcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGKVxcbitcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCJNQ1MlZCwgXFxcIiwgcmF0ZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMlZF9NQ1MlZCwgXFxcIixcXG4rXFx0XFx0XFx0ICAgc3RiYyA/IFxcXCJOU1RTXFxcIiA6IFxcXCJOU1NcXFwiLCBuc3RzLCByYXRlKTtcXG4rXFxuK1xcdC8qIGJhbmR3aWR0aCAqL1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCIlcywgXFxcIixcXG4rXFx0XFx0ICAgZnJtb2RlIFxcdTAwM2MgNSA/IG10NzkyNV90eF9yYXRlX2J3X3N0cltmcm1vZGVdIDpcXG4rXFx0XFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcXG4rXFxuK1xcdC8qIEdJIC8gcHJlYW1ibGUgKi9cXG4rXFx0aWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSylcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMsIFxcXCIsIHJhdGUgXFx1MDAzYyA0ID8gXFxcIkxQXFxcIiA6IFxcXCJTUFxcXCIpO1xcbitcXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxcbitcXHRcXHQ7IC8qIE9GRE0gaGFzIG5vIEdJL3ByZWFtYmxlIHRvIHByaW50ICovXFxuK1xcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XFxuK1xcdFxcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVEdGIHx8XFxuK1xcdFxcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9WSFQgfHxcXG4rXFx0XFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX1BMUilcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMsIFxcXCIsIHNnaSA9PSAwID8gXFxcIkxHSVxcXCIgOiBcXFwiU0dJXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJXMsIFxcXCIsXFxuK1xcdFxcdFxcdCAgIHNnaSA9PSAwID8gXFxcIlNHSVxcXCIgOiAoc2dpID09IDEgPyBcXFwiTUdJXFxcIiA6IFxcXCJMR0lcXFwiKSk7XFxuK1xcbitcXHQvKiBtb2RlLCBEQ00sIDEwNnQsIFNUQkMsIGNvZGluZywgU1BFICovXFxuK1xcdHNlcV9wcmludGYocywgXFxcIiVzJXMlcyVzJXMlcyVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICBtb2RlX3N0cixcXG4rXFx0XFx0ICAgZGNtID8gXFxcIiwgRENNXFxcIiA6IFxcXCJcXFwiLCBlcnN1MTA2dCA/IFxcXCIsIDEwNnRcXFwiIDogXFxcIlxcXCIsXFxuK1xcdFxcdCAgIHN0YmMgPyBcXFwiLCBTVEJDLCBcXFwiIDogXFxcIiwgXFxcIiwgbGRwYyA9PSAwID8gXFxcIkJDQ1xcXCIgOiBcXFwiTERQQ1xcXCIsXFxuK1xcdFxcdCAgIFxcXCIsIFNQRVxcXCIsIHNwZSk7XFxuK1xcbitcXHQvKiBjaGlwIG91dCBUWCBwb3dlciAodW5pdDogMC41IGRCbSkgKi9cXG4rXFx0cG9zX3R4cHdyID0gKHR4cHdyIFxcdTAwM2MgMCkgPyAofnR4cHdyICsgMSkgOiB0eHB3cjtcXG4rXFx0c2VxX3ByaW50ZihzLCBcXFwiJS0yMnMgICVzID0gJWMlZC4lMWQgZEJtXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwiIFxcXCIsIFxcXCJDaGlwIE91dCBUWCBQb3dlclxcXCIsXFxuK1xcdFxcdCAgICh0eHB3ciBcXHUwMDNjIDApID8gJy0nIDogJysnLFxcbitcXHRcXHQgICAocG9zX3R4cHdyIC8gMiksIDUgKiAocG9zX3R4cHdyICUgMikpO1xcbit9XFxuK1xcbisvKiBHdWFyZCBpbnRlcnZhbCB1c2VkIGZvciB0aGUgYXV0by1yYXRlIGVudHJpZXMsIG1pcnJvciBHZW40bVxcbisgKiBjb25uYWMzeF9nZXRfc2dpX2luZm9fZnJvbV9mdygpOiBwaWNrIHRoZSBwZXItbW9kZS9wZXItQlcgZmxhZy5cXG4rICovXFxuK3U4XFxuK210NzkyNV93dGJsX2dldF9zZ2koY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyLCB1OCB0eG1vZGUsIHU4IGZjYXApXFxuK3tcXG4rXFx0Ym9vbCBoZSA9ICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9TVSB8fFxcbitcXHRcXHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9FUiB8fFxcbitcXHRcXHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHIHx8XFxuK1xcdFxcdCAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VKTtcXG4rXFx0Ym9vbCBlaHQgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX0VSIHx8XFxuK1xcdFxcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfVFJJRyB8fFxcbitcXHRcXHQgICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX01VKTtcXG4rXFxuK1xcdGlmIChlaHQpXFxuK1xcdFxcdHJldHVybiB3ci1cXHUwMDNlZ2lfZWh0O1xcbitcXG4rXFx0c3dpdGNoIChmY2FwKSB7XFxuK1xcdGNhc2UgTVQ3OTI1X0JXXzIwOlxcbitcXHRcXHRyZXR1cm4gaGUgPyB3ci1cXHUwMDNlZzJfaGUgOiB3ci1cXHUwMDNlZzI7XFxuK1xcdGNhc2UgTVQ3OTI1X0JXXzQwOlxcbitcXHRcXHRyZXR1cm4gaGUgPyB3ci1cXHUwMDNlZzRfaGUgOiB3ci1cXHUwMDNlZzQ7XFxuK1xcdGNhc2UgTVQ3OTI1X0JXXzgwOlxcbitcXHRcXHRyZXR1cm4gaGUgPyB3ci1cXHUwMDNlZzhfaGUgOiB3ci1cXHUwMDNlZzg7XFxuK1xcdGNhc2UgTVQ3OTI1X0JXXzE2MDpcXG4rXFx0XFx0cmV0dXJuIGhlID8gd3ItXFx1MDAzZWcxNl9oZSA6IHdyLVxcdTAwM2VnMTY7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIENvZGluZyB1c2VkIGZvciB0aGUgYXV0by1yYXRlIGVudHJpZXMsIG1pcnJvciBHZW40bVxcbisgKiBjb25uYWMzeF93dGJsX2dldF9sZHBjX2luZm9fZnJvbV9mdygpOiAwID0gQkNDLCAxID0gTERQQy5cXG4rICovXFxuK3U4XFxuK210NzkyNV93dGJsX2dldF9sZHBjKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlKVxcbit7XFxuK1xcdHN3aXRjaCAodHhtb2RlKSB7XFxuK1xcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWDpcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0Y6XFxuK1xcdFxcdHJldHVybiB3ci1cXHUwMDNlaHRfbGRwYztcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVDpcXG4rXFx0XFx0cmV0dXJuIHdyLVxcdTAwM2V2aHRfbGRwYztcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVOlxcbitcXHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVI6XFxuK1xcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHOlxcbitcXHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfTVU6XFxuK1xcdFxcdHJldHVybiB3ci1cXHUwMDNlaGVfbGRwYztcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUjpcXG4rXFx0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9UUklHOlxcbitcXHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX01VOlxcbitcXHRcXHRyZXR1cm4gd3ItXFx1MDAzZWVodF9sZHBjO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyAqc3RhdHMpXFxuK3tcXG4rXFx0dTE2IGxlbiA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c19ldmVudCAqZXZlbnQgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfcmVxIHJlcSA9IHtcXG4rXFx0XFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19TVEEpLFxcbitcXHRcXHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxcbitcXHRcXHQubGxzX3JlYWRfY2xlYXIgPSBmYWxzZSxcXG4rXFx0XFx0LnJlc2V0X2NvdW50ZXIgPSBmYWxzZSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldCA9IG10NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoZGV2LCBcXHUwMDI2cmVxLnN0YV9yZWNfaWR4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghc3RhdHMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbitcXHRcXHRcXHRcXHRcXHRNQ1VfVU5JX1FVRVJZKEdFVF9TVEFUX0lORk8pLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0ZXZlbnQgPSAoc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRpZiAobGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZXRhZykgIT0gVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NUQSkge1xcbitcXHRcXHRyZXQgPSAtRVBST1RPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bGVuID0gbGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZWxlbik7XFxuK1xcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKmV2ZW50KSAtIHNpemVvZihldmVudC1cXHUwMDNlcnN2KSB8fFxcbitcXHQgICAgbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4gLSBzaXplb2YoZXZlbnQtXFx1MDAzZXJzdikgfHwgIUlTX0FMSUdORUQobGVuLCA0KSkge1xcbitcXHRcXHRyZXQgPSAtRU1TR1NJWkU7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXZlbnQtXFx1MDAzZXN0YXRzLnZlcnNpb24gIT0gTVQ3OTI1X1NUQV9TVEFUU19WRVJTSU9OKSB7XFxuK1xcdFxcdHJldCA9IC1FUFJPVE87XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShsZTMyX3RvX2NwdShldmVudC1cXHUwMDNlc3RhdHMuZmxhZ3MpIFxcdTAwMjYgTVQ3OTI1X1NUQV9TVEFUU19WQUxJRCkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbWNweShzdGF0cywgXFx1MDAyNmV2ZW50LVxcdTAwM2VzdGF0cywgc2l6ZW9mKCpzdGF0cykpO1xcbitcXG4rb3V0OlxcbitcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCBtdDc5MjVfbWN1X2dldF9taWJfaW5mbyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCBiYW5kX2lkeCxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqY291bnRlcnMsIHU4IGNvdW50ZXJfbnVtLFxcbitcXHRcXHRcXHQgICAgdTY0ICp2YWx1ZXMpXFxuK3tcXG4rXFx0dTggKnJlcTtcXG4rXFx0dTggKnRsdiwgKnRsdl9lbmQ7XFxuK1xcdHUxNiByZXFfbGVuO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIgKnJlcV9oZHI7XFxuK1xcdHN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKnJlcV90bHY7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcbitcXHRpZiAoIWNvdW50ZXJzIHx8ICF2YWx1ZXMgfHwgIWNvdW50ZXJfbnVtIHx8XFxuK1xcdCAgICBjb3VudGVyX251bSBcXHUwMDNlIE1UNzkyNV9NSUJfTUFYX0NOVClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBjbGVhciBvdXRwdXQ7IGNvdW50ZXJzIG5vdCByZXR1cm5lZCBieSBmaXJtd2FyZSBzdGF5IDAgKi9cXG4rXFx0bWVtc2V0KHZhbHVlcywgMCwgY291bnRlcl9udW0gKiBzaXplb2YoKnZhbHVlcykpO1xcbitcXG4rXFx0cmVxX2xlbiA9IHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIpICtcXG4rXFx0XFx0ICBjb3VudGVyX251bSAqIHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKTtcXG4rXFxuK1xcdHJlcSA9IGt6YWxsb2MocmVxX2xlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcmVxKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJlcV9oZHIgPSAoc3RydWN0IG10NzkyNV9taWJfaGRyICopcmVxO1xcbitcXHRyZXFfaGRyLVxcdTAwM2ViYW5kX2lkeCA9IGJhbmRfaWR4O1xcbitcXG4rXFx0cmVxX3RsdiA9IChzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICopKHJlcSArIHNpemVvZigqcmVxX2hkcikpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnRlcl9udW07IGkrKykge1xcbitcXHRcXHRyZXFfdGx2W2ldLnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfTUlCX0RBVEEpO1xcbitcXHRcXHRyZXFfdGx2W2ldLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhKSk7XFxuK1xcdFxcdHJlcV90bHZbaV0uY291bnRlciA9IGNwdV90b19sZTMyKGNvdW50ZXJzW2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbitcXHRcXHRcXHRcXHRcXHRNQ1VfVU5JX1FVRVJZKEdFVF9NSUJfSU5GTyksIHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0cmVxX2xlbiwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuK1xcdGtmcmVlKHJlcSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSkge1xcbitcXHRcXHRyZXQgPSAtRU1TR1NJWkU7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKiB3YWxrIHRoZSByZXR1cm5lZCBUTFZzLCBtYXRjaCBlYWNoIGNvdW50ZXIgSUQgdG8gdGhlIHJlcXVlc3QgKi9cXG4rXFx0dGx2ID0gc2tiLVxcdTAwM2VkYXRhICsgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2hkcik7XFxuK1xcdHRsdl9lbmQgPSBza2ItXFx1MDAzZWRhdGEgKyBza2ItXFx1MDAzZWxlbjtcXG4rXFxuK1xcdHdoaWxlICh0bHYgKyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSkgXFx1MDAzYz0gdGx2X2VuZCkge1xcbitcXHRcXHRzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICpldnRfdGx2ID1cXG4rXFx0XFx0XFx0KHN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKil0bHY7XFxuK1xcdFxcdHUxNiB0YWcgPSBsZTE2X3RvX2NwdShldnRfdGx2LVxcdTAwM2V0YWcpO1xcbitcXHRcXHR1MTYgbGVuID0gbGUxNl90b19jcHUoZXZ0X3Rsdi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0dTMyIGNvdW50ZXI7XFxuK1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpIHx8XFxuK1xcdFxcdCAgICB0bHYgKyBsZW4gXFx1MDAzZSB0bHZfZW5kKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmICh0YWcgPT0gVU5JX0NNRF9NSUJfREFUQSkge1xcbitcXHRcXHRcXHRjb3VudGVyID0gbGUzMl90b19jcHUoZXZ0X3Rsdi1cXHUwMDNlY291bnRlcik7XFxuK1xcbitcXHRcXHRcXHRpZiAoY291bnRlciBcXHUwMDNjIE1UNzkyNV9NSUJfQ05UX01BWF9OVU0pIHtcXG4rXFx0XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50ZXJfbnVtOyBpKyspIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKGNvdW50ZXJzW2ldID09IGNvdW50ZXIpIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dmFsdWVzW2ldID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBsZTY0X3RvX2NwdShldnRfdGx2LVxcdTAwM2VkYXRhKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHRsdiArPSBsZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IDA7XFxuK1xcbitvdXQ6XFxuK1xcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2NoYXIgKm10NzkyNV9od19yYXRlX29mZG1fc3RyKHU4IG9mZG1faWR4KVxcbit7XFxuK1xcdGNoYXIgKiBjb25zdCBvZmRtX3N0cltdID0ge1xcbitcXHRcXHRcXFwiNk1cXFwiLCBcXFwiOU1cXFwiLCBcXFwiMTJNXFxcIiwgXFxcIjE4TVxcXCIsIFxcXCIyNE1cXFwiLCBcXFwiMzZNXFxcIiwgXFxcIjQ4TVxcXCIsIFxcXCI1NE1cXFwiLCBcXFwiTi9BXFxcIlxcbitcXHR9O1xcbitcXG4rXFx0c3dpdGNoIChvZmRtX2lkeCkge1xcbitcXHRjYXNlIDExOiByZXR1cm4gb2ZkbV9zdHJbMF07XFx0LyogNk0gKi9cXG4rXFx0Y2FzZSAxNTogcmV0dXJuIG9mZG1fc3RyWzFdO1xcdC8qIDlNICovXFxuK1xcdGNhc2UgMTA6IHJldHVybiBvZmRtX3N0clsyXTtcXHQvKiAxMk0gKi9cXG4rXFx0Y2FzZSAxNDogcmV0dXJuIG9mZG1fc3RyWzNdO1xcdC8qIDE4TSAqL1xcbitcXHRjYXNlIDk6ICByZXR1cm4gb2ZkbV9zdHJbNF07XFx0LyogMjRNICovXFxuK1xcdGNhc2UgMTM6IHJldHVybiBvZmRtX3N0cls1XTtcXHQvKiAzNk0gKi9cXG4rXFx0Y2FzZSA4OiAgcmV0dXJuIG9mZG1fc3RyWzZdO1xcdC8qIDQ4TSAqL1xcbitcXHRjYXNlIDEyOiByZXR1cm4gb2ZkbV9zdHJbN107XFx0LyogNTRNICovXFxuK1xcdGRlZmF1bHQ6IHJldHVybiBvZmRtX3N0cls4XTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUgLSBmZXRjaCB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIGZvciBhIFdDSURcXG4rICogQGRldjpcXHRkZXZpY2VcXG4rICogQHdsYW5faWR4OlxcdEhXIFdUQkwgLyBXQ0lEIGluZGV4IChzZWUgbXQ3OTI1X3N0YV9zdGF0cy53dGJsX2lkeClcXG4rICogQHJhdGU6XFx0b3V0LCBmaWxsZWQgd2l0aCB0aGUgYXV0by1yYXRlIHRhYmxlIHNuYXBzaG90XFxuKyAqXFxuKyAqIE1pcnJvciBvZiBHZW40bSB3bGFub2lkR2V0U3RhdFd0YmwoKTogc2VuZCBVTklfQ01EX0dFVF9TVEFUX0lORk8gd2l0aCB0aGVcXG4rICogV1RCTCByYXRlIFRMViAoY21kIHRhZyAxMCkgYW5kIHBhcnNlIHRoZSByZXBseSAoZXZlbnQgdGFnIDEyKSBpbnRvIEByYXRlLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLlxcbisgKi9cXG4raW50IG10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MTYgd2xhbl9pZHgsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKnJhdGUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IG10NzkyNV93dGJsX3JhdGVfZXZlbnQgKmV2ZW50ID0gTlVMTDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuK1xcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX3JlcSByZXEgPSB7XFxuK1xcdFxcdC50YWcgPSBjcHVfdG9fbGUxNihVTklfQ01EX0lEX1NUQVRJU1RJQ1NfV1RCTCksXFxuK1xcdFxcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksXFxuK1xcdFxcdC53bGFuX2lkeCA9IGNwdV90b19sZTE2KHdsYW5faWR4KSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsXFxuK1xcdFxcdFxcdFxcdFxcdE1DVV9VTklfUVVFUlkoR0VUX1NUQVRfSU5GTyksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqZXZlbnQpKSB7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICopc2tiLVxcdTAwM2VkYXRhO1xcbitcXG4rXFx0aWYgKGxlMTZfdG9fY3B1KGV2ZW50LVxcdTAwM2VyYXRlLnRhZykgIT0gTVQ3OTI1X1VOSV9FVkVOVF9TVEFUSVNUSUNTX1dUQkwpIHtcXG4rXFx0XFx0cmV0ID0gLUVQUk9UTztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbWNweShyYXRlLCBcXHUwMDI2ZXZlbnQtXFx1MDAzZXJhdGUsIHNpemVvZigqcmF0ZSkpO1xcbitcXHRyZXQgPSAwO1xcbitcXG4rb3V0OlxcbitcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkgLSBxdWVyeSBSU1NJIGFuZCBUWCBsaW5rIHNwZWVkIGZvciBhIGJhbmRcXG4rICogQGRldjpcXHRkZXZpY2VcXG4rICogQGJhbmRfaWR4OlxcdGJhbmQvQlNTIGluZGV4ICgwLi4zKVxcbisgKiBAcnNzaTpcXHRvdXQsIG1vdmluZy1hdmVyYWdlIGJlYWNvbiBSU1NJIGluIGRCbSAobWF5IGJlIE5VTEwpXFxuKyAqIEB0eF9saW5rX3NwZWVkX2ticHM6IG91dCwgVFggcmF0ZSBpbiBrYml0L3MgKG1heSBiZSBOVUxMKVxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgYmFuZCdzIGxpbmsgcXVhbGl0eSBpcyBub3QgcmVhZHkuXFxuKyAqXFxuKyAqIE9ubHkgUlNTSSBhbmQgVFggcmF0ZSBjb21lIGZyb20gZmlybXdhcmUgaGVyZTsgZm9yIFJYIHJhdGUgcmVhZCB3Y2lkLVxcdTAwM2VyYXRlLlxcbisgKi9cXG4raW50IG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCBiYW5kX2lkeCxcXG4rXFx0XFx0XFx0XFx0czggKnJzc2ksIHUzMiAqdHhfbGlua19zcGVlZF9rYnBzKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdHN0cnVjdCBtdDc5MjVfbHFfZXZlbnQgKmV2ZW50O1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X2xpbmtfcXVhbGl0eSAqbHE7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHN0cnVjdCBtdDc5MjVfbHFfcmVxIHJlcSA9IHtcXG4rXFx0XFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkpLFxcbitcXHRcXHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxcbitcXHR9O1xcbitcXG4rXFx0aWYgKGJhbmRfaWR4IFxcdTAwM2U9IE1UNzkyNV9MUV9CQU5EX05VTSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsXFxuK1xcdFxcdFxcdFxcdFxcdE1DVV9VTklfUVVFUlkoR0VUX1NUQVRfSU5GTyksIFxcdTAwMjZyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqZXZlbnQpKSB7XFxuK1xcdFxcdHJldCA9IC1FTVNHU0laRTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfbHFfZXZlbnQgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRpZiAobGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZXRhZykgIT0gVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSkge1xcbitcXHRcXHRyZXQgPSAtRVBST1RPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bHEgPSBcXHUwMDI2ZXZlbnQtXFx1MDAzZWxxW2JhbmRfaWR4XTtcXG4rXFx0aWYgKCFscS1cXHUwMDNlaXNfcmVhZHkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyc3NpKVxcbitcXHRcXHQqcnNzaSA9IGxxLVxcdTAwM2Vyc3NpO1xcbitcXG4rXFx0LyogZmlybXdhcmUgcmVwb3J0cyBUWCByYXRlIGluIDUwMCBLYi9zIHVuaXRzIC1cXHUwMDNlIGtiaXQvcyAqL1xcbitcXHRpZiAodHhfbGlua19zcGVlZF9rYnBzKVxcbitcXHRcXHQqdHhfbGlua19zcGVlZF9rYnBzID0gbGUxNl90b19jcHUobHEtXFx1MDAzZWxpbmtfc3BlZWQpICogNTAwO1xcbitcXG4rXFx0cmV0ID0gMDtcXG4rXFxuK291dDpcXG4rXFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTcwYjllYjNhYTgwNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oXFxuQEAgLTAsMCArMSwzMDkgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhciAqL1xcbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYgTWVkaWFUZWsgSW5jLiAqL1xcbitcXG4rI2lmbmRlZiBfX01UNzkyNV9TVEFUU19IXFxuKyNkZWZpbmUgX19NVDc5MjVfU1RBVFNfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vbXQ3Nl9jb25uYWNfbWN1LmhcXFwiXFxuK1xcbisjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfQUNfTlVNIDRcXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNIDJcXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0FHR19SQU5HRV9OVU0gMTZcXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1RYX1FVQUxJVFlfTlVNIDRcXG4rI2RlZmluZSBNVDc5MjVfVFhfTU9ERV9OVU0gICAgICAxNlxcbisjZGVmaW5lIE1UNzkyNV9UWF9SQVRFX0NDS19OVU0gIDVcXG4rI2RlZmluZSBNVDc5MjVfVFhfUkFURV9CV19OVU0gICA2XFxuK1xcbisvKiBIVyByYXRlIGNvZGUgKDE2LWJpdCkgZmllbGQgZXh0cmFjdCwgbWlycm9yIEdlbjRtIENPTk5BQzNYX0hXX1RYX1JBVEVfVE9fKi5cXG4rICogVGhlIGF1dG8tcmF0ZSB0YWJsZSBzdG9yZXMgb25lIHJhdGUgY29kZSBwZXIgZW50cnkuXFxuKyAqL1xcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX01DUyhfeClcXHQoKChfeCkgXFx1MDAyNiBHRU5NQVNLKDUsIDApKSBcXHUwMDNlXFx1MDAzZSAwKVxcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX01PREUoX3gpXFx0KCgoX3gpIFxcdTAwMjYgR0VOTUFTSyg5LCA2KSkgXFx1MDAzZVxcdTAwM2UgNilcXG4rI2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19OU1MoX3gpXFx0KCgoX3gpIFxcdTAwMjYgR0VOTUFTSygxMywgMTApKSBcXHUwMDNlXFx1MDAzZSAxMClcXG4rI2RlZmluZSBNVDc5MjVfSFdfUkFURV9UT19TVEJDKF94KVxcdCgoKF94KSBcXHUwMDI2IEJJVCgxNCkpIFxcdTAwM2VcXHUwMDNlIDE0KVxcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX0RDTShfeClcXHQoKChfeCkgXFx1MDAyNiBCSVQoNCkpIFxcdTAwM2VcXHUwMDNlIDQpXFxuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fMTA2VChfeClcXHQoKChfeCkgXFx1MDAyNiBCSVQoNSkpIFxcdTAwM2VcXHUwMDNlIDUpXFxuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVU5NQVNLX0RDTShfcilcXHQoKHU4KShfcikgXFx1MDAyNiAweGVmKVxcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1VOTUFTS18xMDZUKF9yKVxcdCgodTgpKF9yKSBcXHUwMDI2IDB4ZGYpXFxuK1xcbisvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIChtaXJyb3IgR2VuNG1cXG4rICogQVVUT19SQVRFX05VTSkuIFJBIGN5Y2xlcyB0aHJvdWdoIHRoZXNlIGFuZCByZXBvcnRzIHdoaWNoIG9uZSBpcyBpbiB1c2VcXG4rICogdmlhIHd0YmwtXFx1MDAzZXJhdGVfaWR4LlxcbisgKi9cXG4rI2RlZmluZSBNVDc5MjVfQVVUT19SQVRFX05VTSA4XFxuK1xcbisvKiBGaXJtd2FyZSBFVkVOVF9TVEFUSVNUSUNTIHN1Yi1ldmVudCB0YWdzLiBUaGUgV1RCTCByYXRlIHJlcXVlc3QgdXNlcyBjbWQgdGFnXFxuKyAqIFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMICgxMCkgYnV0IHRoZSBmaXJtd2FyZSByZXBsaWVzIHdpdGggZXZlbnQgdGFnIDEyLlxcbisgKi9cXG4rI2RlZmluZSBNVDc5MjVfVU5JX0VWRU5UX1NUQVRJU1RJQ1NfV1RCTCAxMlxcbitcXG4rLyogQ09OTkFDM1ggVFggVmVjdG9yIEJCUCBsYXRjaCBiaXQgZmllbGRzIChtaXJyb3IgY21tX2FzaWNfY29ubmFjM3guaCkuXFxuKyAqIFRoZXNlIG9wZXJhdGUgb24gdGhlIDMtRFdPUkQgdHhfdmVjdG9yW2JhbmRdLnR4dlszXSBhcnJheS5cXG4rICovXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUkFURShfdHh2KVxcdCgoX3R4dilbMl0gXFx1MDAyNiAweDdmKVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0xEUEMoX3R4dilcXHQoKChfdHh2KVsyXSBcXHUwMDI2ICgweDEgXFx1MDAzY1xcdTAwM2MgNykpIFxcdTAwM2VcXHUwMDNlIDcpXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyhfdHh2KVxcdCgoKF90eHYpWzBdIFxcdTAwMjYgKDB4MyBcXHUwMDNjXFx1MDAzYyA2KSkgXFx1MDAzZVxcdTAwM2UgNilcXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9GUk1PREUoX3R4dilcXHQoKChfdHh2KVswXSBcXHUwMDI2ICgweDcgXFx1MDAzY1xcdTAwM2MgOCkpIFxcdTAwM2VcXHUwMDNlIDgpXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfTU9ERShfdHh2KVxcdCgoKF90eHYpWzBdIFxcdTAwMjYgKDB4ZiBcXHUwMDNjXFx1MDAzYyAxMikpIFxcdTAwM2VcXHUwMDNlIDEyKVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX05TVFMoX3R4dilcXHQoKChfdHh2KVsyXSBcXHUwMDI2ICgweGZVIFxcdTAwM2NcXHUwMDNjIDI4KSkgXFx1MDAzZVxcdTAwM2UgMjgpXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfUFdSKF90eHYpXFx0KCgoX3R4dilbMF0gXFx1MDAyNiAoMHhmZiBcXHUwMDNjXFx1MDAzYyAxNikpIFxcdTAwM2VcXHUwMDNlIDE2KVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NHSShfdHh2KVxcdCgoKF90eHYpWzFdIFxcdTAwMjYgKDB4MyBcXHUwMDNjXFx1MDAzYyAyNikpIFxcdTAwM2VcXHUwMDNlIDI2KVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NQRV9JRFgoX3R4dilcXHQoKChfdHh2KVswXSBcXHUwMDI2ICgweDFmIFxcdTAwM2NcXHUwMDNjIDApKSBcXHUwMDNlXFx1MDAzZSAwKVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0RDTShfdHh2KVxcdCgoKF90eHYpWzJdIFxcdTAwMjYgKDB4MSBcXHUwMDNjXFx1MDAzYyA0KSkgXFx1MDAzZVxcdTAwM2UgNClcXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF8xMDZUKF90eHYpXFx0KCgoX3R4dilbMl0gXFx1MDAyNiAoMHgxIFxcdTAwM2NcXHUwMDNjIDUpKSBcXHUwMDNlXFx1MDAzZSA1KVxcbisjZGVmaW5lIE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfRENNKF9yKVxcdCgodTgpKF9yKSBcXHUwMDI2IDB4ZWYpXFxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS18xMDZUKF9yKVxcdCgodTgpKF9yKSBcXHUwMDI2IDB4ZGYpXFxuK1xcbitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9tb2RlX3N0cltNVDc5MjVfVFhfTU9ERV9OVU1dO1xcbitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG10NzkyNV90eF9yYXRlX2Nja19zdHJbTVQ3OTI1X1RYX1JBVEVfQ0NLX05VTV07XFxuK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW01UNzkyNV9UWF9SQVRFX0JXX05VTV07XFxuK1xcbisvKiBUWCByYXRlIG1vZGUsIG1pcnJvciBHZW40bSBUWF9SQVRFX01PREVfKiAoc2VlIG5pY19yYXRlLmgpLiBVc2VkIHRvIGRlY29kZVxcbisgKiBib3RoIHRoZSBUWCBWZWN0b3IgQkJQIGxhdGNoIGFuZCB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIHJhdGUgY29kZXMuXFxuKyAqL1xcbitlbnVtIG10NzkyNV90eF9yYXRlX21vZGUge1xcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0NDSyA9IDAsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSA9IDEsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggPSAyLFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YgPSAzLFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCA9IDQsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfUExSID0gNSxcXG4rXFx0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9TVSA9IDgsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgPSA5LFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1RSSUcgPSAxMCxcXG4rXFx0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9NVSA9IDExLFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUiA9IDEzLFxcbitcXHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9UUklHID0gMTQsXFxuK1xcdE1UNzkyNV9UWF9SQVRFX01PREVfRUhUX01VID0gMTUsXFxuK307XFxuK1xcbitlbnVtIHtcXG4rXFx0VU5JX0NNRF9NSUJfREFUQSxcXG4rfTtcXG4rXFxuK2VudW0gc3RhdHNfcXVlcnlfbWliX2FycmF5X2luZGV4IHtcXG4rXFx0UVVFUllfTUlCX0NOVF9SWF9GQ1NfRVJSID0gMCxcXG4rXFx0UVVFUllfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XLFxcbitcXHRRVUVSWV9NSUJfQ05UX1JYX01QRFUsXFxuK1xcdFFVRVJZX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQsXFxuK1xcdFFVRVJZX01JQl9DTlRfUEZfRFJPUCxcXG4rXFx0UVVFUllfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXFxuK1xcdFFVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFLFxcbitcXHRRVUVSWV9NSUJfQ05UX0NDQV9OQVZfVFhfVElNRSxcXG4rXFx0UVVFUllfTUlCX0NOVF9NRFJEWSxcXG4rXFx0UVVFUllfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSxcXG4rXFx0UVVFUllfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUUsXFxuK1xcdFFVRVJZX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxcbitcXHRRVUVSWV9NSUJfQ05UX1BfQ0NBX1RJTUUsXFxuK1xcdFFVRVJZX01JQl9DTlRfU19DQ0FfVElNRSxcXG4rXFx0UVVFUllfTUlCX0NOVF9QX0VEX1RJTUUsXFxuK1xcdFFVRVJZX01JQl9DTlRfQkNOX1RYLFxcbitcXHRRVUVSWV9NSUJfQ05UX1RYX0JXXzQwTUhaLFxcbitcXHRRVUVSWV9NSUJfQ05UX1RYX0JXXzgwTUhaLFxcbitcXHRRVUVSWV9NSUJfQ05UX1RYX0JXXzE2ME1IWixcXG4rXFx0UVVFUllfTUlCX0NOVF9CU1MwX0JBX01JU1MsXFxuK1xcdFFVRVJZX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxcbitcXHRRVUVSWV9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUlksXFxuK1xcdFFVRVJZX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8yLFxcbitcXHRRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxcbitcXHRRVUVSWV9NSUJfQ05UX0JTUzBfQUNLX0ZBSUwsXFxuK1xcdFFVRVJZX01JQl9DTlRfQU1QRFUsXFxuK1xcdFFVRVJZX01JQl9DTlRfQU1QRFVfTVBEVSxcXG4rXFx0UVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRCxcXG4rXFx0UVVFUllfTUlCX0NOVF9NQVhfTlVNLFxcbit9O1xcbitcXG4rZW51bSBzdGF0c190cnhfYWdnX3JhbmdlIHtcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UwX0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UxX0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UyX0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UzX0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U0X0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U1X0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U2X0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U3X0lEWCxcXG4rXFx0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0VfTUFYX05VTVxcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdE1UNzkyNV9CV18yMCA9IDAsXFxuK1xcdE1UNzkyNV9CV180MCxcXG4rXFx0TVQ3OTI1X0JXXzgwLFxcbitcXHRNVDc5MjVfQldfMTYwLFxcbit9O1xcbitcXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfYWMge1xcbitcXHRfX2xlMzIgdHhfZmFpbDtcXG4rXFx0X19sZTMyIHR4X3JldHJ5O1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfdHhfdmVjdG9yIHtcXG4rXFx0X19sZTMyIHR4dlszXTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX21pYiB7XFxuK1xcdF9fbGUzMiByeF9tcGR1X2NudDtcXG4rXFx0X19sZTMyIGZjc19lcnJvcjtcXG4rXFx0X19sZTMyIHJ4X2ZpZm9fZnVsbDtcXG4rXFx0X19sZTMyIGFtcGR1X3R4X3NmX2NudDtcXG4rXFx0X19sZTMyIGFtcGR1X3R4X2Fja19zZl9jbnQ7XFxuK1xcdF9fbGUzMiB0eF9yYW5nZV9hbXBkdV9jbnRbTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNXTtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qIEZpcm13YXJlIEVWRU5UX1NUQV9TVEFUSVNUSUNTIGJvZHkuICovXFxuK3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzIHtcXG4rXFx0dTggdmVyc2lvbjtcXG4rXFx0dTggcnN2WzNdO1xcbitcXHRfX2xlMzIgZmxhZ3M7XFxuK1xcbitcXHR1OCBzdGFfaWR4O1xcbitcXHR1OCBic3NfaWR4O1xcbitcXHR1OCB3dGJsX2lkeDtcXG4rXFx0dTggcnN2MTtcXG4rXFxuK1xcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcXG4rXFx0dTggcGVyO1xcbitcXHR1OCByY3BpO1xcbitcXG4rXFx0X19sZTMyIHBoeV9tb2RlO1xcbitcXHRfX2xlMTYgbGlua19zcGVlZDsgLyogMC41IE1iaXQvcyB1bml0cyAqL1xcbitcXHR1OCBsaW5rX3F1YWxpdHk7XFxuK1xcdHU4IGxpbmtfcmVzZXJ2ZWQ7XFxuK1xcbitcXHRfX2xlMzIgdHhfY291bnQ7XFxuK1xcdF9fbGUzMiB0eF9mYWlsX2NvdW50O1xcbitcXHRfX2xlMzIgdHhfbGlmZV90aW1lb3V0X2NvdW50O1xcbitcXHRfX2xlMzIgdHhfZG9uZV9haXJfdGltZTtcXG4rXFx0X19sZTMyIHRyYW5zbWl0X2NvdW50O1xcbitcXHRfX2xlMzIgdHJhbnNtaXRfZmFpbF9jb3VudDtcXG4rXFxuK1xcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2FjIGFjW01UNzkyNV9TVEFfU1RBVFNfQUNfTlVNXTtcXG4rXFxuK1xcdHU4IHRlbXBlcmF0dXJlO1xcbitcXHR1OCBza2lwX2FyO1xcbitcXHR1OCBhcl90YWJsZV9pZHg7XFxuK1xcdHU4IHJhdGVfZW50cnlfaWR4O1xcbitcXHR1OCByYXRlX2VudHJ5X2lkeF9wcmV2O1xcbitcXHR1OCB0eF9zZ2lfZGV0ZWN0X3Bhc3NfY250O1xcbitcXHR1OCBhdmVfcGVyO1xcbitcXHR1OCByc3YyO1xcbitcXG4rXFx0X19sZTMyIGFnZ19yYW5nZV9jdHJsWzJdO1xcbitcXHR1OCByYW5nZV9tb2RlO1xcbitcXHR1OCByc3YzWzNdO1xcbitcXHRfX2xlMzIgYWdnX3JhbmdlX2N0cmxfZXh0WzZdO1xcbitcXG4rXFx0dTggYXJfc3RhdGVfY3VycjtcXG4rXFx0dTggYXJfc3RhdGVfcHJldjtcXG4rXFx0dTggYXJfYWN0aW9uX3R5cGU7XFxuK1xcdHU4IGhpZ2hlc3RfcmF0ZV9jbnQ7XFxuK1xcdHU4IGxvd2VzdF9yYXRlX2NudDtcXG4rXFx0dTggcnN2NDtcXG4rXFx0X19sZTE2IHRyYWluX3VwO1xcbitcXHRfX2xlMTYgdHJhaW5fZG93bjtcXG4rXFx0dTggcnN2NVsyXTtcXG4rXFx0X19sZTMyIHJhdGUxX3R4X2NudDtcXG4rXFx0X19sZTMyIHJhdGUxX2ZhaWxfY250O1xcbitcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfdHhfdmVjdG9yIHR4X3ZlY3RvcltNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNXTtcXG4rXFx0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfbWliIG1pYltNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNXTtcXG4rXFxuK1xcdHU4IGlzX2ZvcmNlX3R4X3N0cmVhbTtcXG4rXFx0dTggaXNfZm9yY2Vfc2Vfb2ZmO1xcbitcXHRfX2xlMTYgcmFfcnVubmluZ19jbnQ7XFxuK1xcdHU4IHJhX3N0YXR1cztcXG4rXFx0dTggbWF4X2FtcGR1X2ZhY3RvcjtcXG4rXFx0dTggdHhfcXVhbGl0eVtNVDc5MjVfU1RBX1NUQVRTX1RYX1FVQUxJVFlfTlVNXTtcXG4rXFx0dTggdHhfcmF0ZV91cF9wZW5hbHR5O1xcbitcXHR1OCBsb3dfdHJhZmZpY19tb2RlO1xcbitcXHR1OCBsb3dfdHJhZmZpY19jb3VudDtcXG4rXFx0dTggbG93X3RyYWZmaWNfZGFzaGJvYXJkO1xcbitcXHR1OCBkeW5hbWljX3NnaV9zdGF0ZTtcXG4rXFx0dTggZHluYW1pY19zZ2lfc2NvcmU7XFxuK1xcdHU4IGR5bmFtaWNfYndfc3RhdGU7XFxuK1xcdHU4IGR5bmFtaWNfZ2JhbmRfMjU2cWFtX3N0YXRlO1xcbitcXHR1OCB2aHRfbm9uX3NwX3JhdGVfc3RhdGU7XFxuK1xcdHU4IHJzdjZbM107XFxuK1xcdHU4IHJzdjdbMl07XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdHJ1Y3QgbXQ3OTI1X3N0YV9yZWNfbG9va3VwIHtcXG4rXFx0aW50IHN0YV9yZWNfaWR4O1xcbit9O1xcbitcXG4rLyogRmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIHNuYXBzaG90LCBtaXJyb3IgR2VuNG0gc3RydWN0IFVOSV9FVkVOVF9TVEFUX1dUQkwuXFxuKyAqXFxuKyAqIFRoZSBmaXJtd2FyZSBSQSBtYWludGFpbnMgdXAgdG8gTVQ3OTI1X0FVVE9fUkFURV9OVU0gY2FuZGlkYXRlIHJhdGVzIGluXFxuKyAqIHJhdGVfY29kZVtdLiByYXRlX2lkeCB0ZWxscyB3aGljaCBlbnRyeSBpcyBjdXJyZW50bHkgaW4gdXNlLCBzbyBhIGR1bXAgY2FuXFxuKyAqIHBvaW50IGF0IGl0IHdpdGggXFxcIi0tXFx1MDAzZVxcXCIuIGZjYXAgaXMgdGhlIGJhbmR3aWR0aCBjYXBhYmlsaXR5IGFuZCB0aGUgbGRwYy9zZ2lcXG4rICogZmxhZ3MgZGVzY3JpYmUgdGhlIHBlci1tb2RlIGNvZGluZy9ndWFyZC1pbnRlcnZhbCB1c2VkIGZvciB0aG9zZSByYXRlcy5cXG4rICovXFxuK3N0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0X19sZTE2IGxlbjtcXG4rXFx0dTggcnhfcmNwaTA7XFxuK1xcdHU4IHJ4X3JjcGkxO1xcbitcXHR1OCBjYnJuO1xcbitcXHR1OCBmY2FwO1xcbitcXHR1OCBzcGVfaWR4O1xcbitcXHR1OCBnMjtcXHRcXHRcXHQvKiBTR0kgZW5hYmxlZCwgbm9uLUhFLCBCVzIwICovXFxuK1xcdHU4IGc0O1xcdFxcdFxcdC8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXNDAgKi9cXG4rXFx0dTggZzg7XFx0XFx0XFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlc4MCAqL1xcbitcXHR1OCBnMTY7XFx0XFx0XFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlcxNjAgKi9cXG4rXFx0dTggZzJfaGU7XFx0XFx0LyogR0ksIEhFLCBCVzIwICovXFxuK1xcdHU4IGc0X2hlO1xcdFxcdC8qIEdJLCBIRSwgQlc0MCAqL1xcbitcXHR1OCBnOF9oZTtcXHRcXHQvKiBHSSwgSEUsIEJXODAgKi9cXG4rXFx0dTggZzE2X2hlO1xcdFxcdC8qIEdJLCBIRSwgQlcxNjAgKi9cXG4rXFx0dTggZ2lfZWh0O1xcdFxcdC8qIEdJLCBFSFQgKi9cXG4rXFx0dTggaHRfbGRwYztcXG4rXFx0dTggdmh0X2xkcGM7XFxuK1xcdHU4IGhlX2xkcGM7XFxuK1xcdHU4IGVodF9sZHBjO1xcbitcXHR1OCBhZjtcXG4rXFx0dTggcmF0ZV9pZHg7XFx0XFx0LyogaW5kZXggaW50byByYXRlX2NvZGVbXSBjdXJyZW50bHkgaW4gdXNlICovXFxuK1xcdF9fbGUxNiByYXRlX2NvZGVbTVQ3OTI1X0FVVE9fUkFURV9OVU1dO1xcbitcXHRfX2xlMzIgcnN2WzRdO1xcbit9IF9fcGFja2VkO1xcbitcXG4raW50XFxuK210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHgoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggKnN0YV9yZWNfaWR4KTtcXG4rXFxuK3ZvaWRcXG4rbXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IF9fbGUzMiBsZV90eHZbM10pO1xcbitcXG4rdThcXG4rbXQ3OTI1X3d0YmxfZ2V0X3NnaShjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSwgdTggZmNhcCk7XFxuK1xcbit1OFxcbittdDc5MjVfd3RibF9nZXRfbGRwYyhjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSk7XFxuK1xcbitjaGFyICptdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cih1OCBvZmRtX2lkeCk7XFxuK1xcbitpbnQgbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUxNiB3bGFuX2lkeCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqcmF0ZSk7XFxuK1xcbitpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyAqc3RhdHMpO1xcbitcXG4raW50IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGJhbmRfaWR4LFxcbitcXHRcXHRcXHQgICAgY29uc3QgdTMyICpjb3VudGVycywgdTggY291bnRlcl9udW0sXFxuK1xcdFxcdFxcdCAgICB1NjQgKnZhbHVlcyk7XFxuK1xcbisvKiBHRVRfU1RBVF9JTkZPIChVTklfQ01EX0lEX0dFVF9TVEFUSVNUSUNTID0gMHgyMyksXFxuKyAqIHN1Yi1jb21tYW5kIFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfUVVBTElUWSA9IDEuXFxuKyAqXFxuKyAqIEBiYW5kX2lkeDogICAgICAgICAgICBiYW5kL0JTUyBpbmRleCAoMC4uMylcXG4rICogQHJzc2k6ICAgICAgICAgICAgICAgIG91dCwgbW92aW5nLWF2ZXJhZ2UgYmVhY29uIFJTU0kgKGRCbSksIG1heSBiZSBOVUxMXFxuKyAqIEB0eF9saW5rX3NwZWVkX2ticHM6ICBvdXQsIFRYIGxpbmsgc3BlZWQgaW4ga2JpdC9zLCBtYXkgYmUgTlVMTFxcbisgKlxcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgYmFuZCdzIGxpbmsgcXVhbGl0eSBpcyBub3QgcmVhZHkuXFxuKyAqXFxuKyAqIE5PVEU6IGZpcm13YXJlIHByb3ZpZGVzIG9ubHkgUlNTSSBhbmQgVFggcmF0ZSBoZXJlLiBSWCByYXRlL2JhbmR3aWR0aCBhcmVcXG4rICogbm90IGluIHRoaXMgZXZlbnQ7IHJlYWQgd2NpZC1cXHUwMDNlcmF0ZSBmb3IgdGhlIFJYIHJhdGUuXFxuKyAqL1xcbitpbnQgbXQ3OTI1X21jdV9nZXRfbGlua19xdWFsaXR5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGJhbmRfaWR4LFxcbitcXHRcXHRcXHRcXHRzOCAqcnNzaSwgdTMyICp0eF9saW5rX3NwZWVkX2ticHMpO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEyOjMxLjMzOTYzNzI2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE5MzE3MzY0MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYSBkZWJ1Z2ZzIGVudHJ5IHRvIHF1ZXJ5IGFuZCBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlLiBJdCBpcyBhIGRpYWdub3N0aWMvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGRyaXZlcidzIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWU1ZGI1YmQxZDNjY2VjNDk4YmEyMjg0NzJlNzFiNDY4YWFiNGRiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA5OjEyOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhcbmluZGV4IDBlZGVkYTU2OWU5YTUuLmJmMGYxMDVjNzg2ZTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oXG5AQCAtMTQ4Myw2ICsxNDgzLDE3OSBAQCBlbnVtIHtcbiBcdE1UX05JQ19DQVBfRU1MX0NBUCA9IDB4MjIsXG4gfTtcbiBcbitlbnVtIHtcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19CQVNJQyA9IDAsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19RVUFMSVRZID0gMSxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19TVEEgPSAyLFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0JVR19SRVBPUlQgPSAzLFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1RYX1NUQVRTID0gNCxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19BTExfU1RBVFMgPSA1LFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0VNTF9TVEFUUyA9IDYsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfUkVHVUxBUl9TVEFUUyA9IDcsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQlNTX0xJTktfUVVBTElUWSA9IDgsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTUxfQ0hOTF9DT05EID0gOSxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMID0gMTAsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfTElOS19MQVlFUl9TVEFUUyA9IDEyOCxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19QUERVX0xBVEVOQ1kgPSAxMjksXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfQ1VSUkVOVF9UWF9SQVRFID0gMTMwLFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX1NFVF9UWF9CSVRSQVRFX01PTklUT1IgPSAxMzEsXG4rXHRVTklfQ01EX0lEX1NUQVRJU1RJQ1NfR0VUX1BSRURJQ1RfVFhfQklUUkFURSA9IDEzMixcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19TRVRfQVRQU19UWVBFX1JBVEVfTU9ERSA9IDEzMyxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19TRVRfQkVBQ09OX1JFUE9SVCA9IDEzNCxcbitcdFVOSV9DTURfSURfU1RBVElTVElDU19CU1NfQ1VSUkVOVF9UWF9SQVRFID0gMTM1LFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX0dFVF9CU1NfUFJFRElDVF9UWF9CSVRSQVRFID0gMTM2LFxuK1x0VU5JX0NNRF9JRF9TVEFUSVNUSUNTX01BWF9OVU1cbit9O1xuK1xuK2VudW0gbXQ3OTI1X21pYl9jb3VudGVyIHtcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9GQ1NfRVJSID0gMCxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XID0gMSxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9NUERVID0gMixcbitcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9SWF9DT1VOVCA9IDMsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfVE9UQUxfQllURSA9IDQsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfVkFMSURfQU1QRFVfU0YgPSA1LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX1ZBTElEX0JZVEUgPSA2LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0NIQU5ORUxfSURMRSA9IDcsXG4rXHRVTklfQ01EX01JQl9DTlRfVkVDX0RST1AgPSA4LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0RFTElNSVRFUl9GQUlMID0gOSxcbitcdFVOSV9DTURfTUlCX0NOVF9WRUNfTUlTTUFUQ0ggPSAxMCxcbitcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSA9IDExLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0NDS19NRFJEWV9USU1FID0gMTIsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9MR19NSVhFRF9NRFJEWV9USU1FID0gMTMsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FID0gMTQsXG4rXHRVTklfQ01EX01JQl9DTlRfUEZfRFJPUCA9IDE1LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0xFTl9NSVNNQVRDSCA9IDE2LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1BfQ0NBX1RJTUUgPSAxNyxcbitcdFVOSV9DTURfTUlCX0NOVF9TX0NDQV9USU1FID0gMTgsXG4rXHRVTklfQ01EX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FID0gMTksXG4rXHRVTklfQ01EX01JQl9DTlRfUF9FRF9USU1FID0gMjAsXG4rXHRVTklfQ01EX01JQl9DTlRfQkNOX1RYID0gMjEsXG4rXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMjBNSFogPSAyMixcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9CV180ME1IWiA9IDIzLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaID0gMjQsXG4rXHRVTklfQ01EX01JQl9DTlRfVFhfQldfMTYwTUhaID0gMjUsXG4rXHRVTklfQ01EX1JNQUNfQ05UX09CU1NfQUlSVElNRSA9IDI2LFxuK1x0VU5JX0NNRF9STUFDX0NOVF9OT05XSUZJX0FJUlRJTUUgPSAyNyxcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9EVVJfQ05UID0gMjgsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfRFVSX0NOVCA9IDI5LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JBX0NOVCA9IDMwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX01BQzJQSFlfVFhfVElNRSA9IDMxLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX09VVF9PRl9SQU5HRV9DT1VOVCA9IDMyLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0lCRl9UWCA9IDMzLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0VCRl9UWCA9IDM0LFxuK1x0VU5JX0NNRF9NSUJfQ05UX01VQkZfVFggPSAzNSxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9CRl9WSFRGQksgPSAzNixcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9CRl9IVEZCSyA9IDM3LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0hFRkJLID0gMzgsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19CRlBPTExfVFJJID0gMzksXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19UUkkgPSA0MCxcbitcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1JYX0ZCS0NRSSA9IDQxLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JGRUVfUlhfTkRQID0gNDIsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfQkZfSUJGX1VQVCA9IDQzLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0JGX0VCRl9VUFQgPSA0NCxcbitcdFVOSV9DTURfTUlCX0NOVF9CRkVFX1NQX0FCT1JUID0gNDUsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UQl9MRU5fRVJSID0gNDYsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19NVVRFID0gNDcsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UTUFDX0FCT1JUID0gNDgsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9UWEZCS19DUEwgPSA0OSxcbitcdFVOSV9DTURfTUlCX0NOVF9CRkVFX0NPQU5UX0JMS1RYID0gNTAsXG4rXHRVTklfQ01EX01JQl9DTlRfQkZFRV9GQktfU0VHID0gNTEsXG4rXHRVTklfQ01EX01JQl9DTlRfTkFWX1RJTUUgPSA1MixcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9BQk9SVF9DTlQxID0gNTMsXG4rXHRVTklfQ01EX01JQl9DTlRfVFhfQUJPUlRfQ05UMCA9IDU0LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0FCT1JUX0NOVDMgPSA1NSxcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9BQk9SVF9DTlQyID0gNTYsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05UID0gNTcsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMV9SVFNfVFhfQ05UID0gNTgsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMl9SVFNfVFhfQ05UID0gNTksXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTM19SVFNfVFhfQ05UID0gNjAsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfUkVUUlkgPSA2MSxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MxX1JUU19SRVRSWSA9IDYyLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfUlRTX1JFVFJZID0gNjMsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTM19SVFNfUkVUUlkgPSA2NCxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0JBX01JU1MgPSA2NSxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MxX0JBX01JU1MgPSA2NixcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MyX0JBX01JU1MgPSA2NyxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MzX0JBX01JU1MgPSA2OCxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0FDS19GQUlMID0gNjksXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMV9BQ0tfRkFJTCA9IDcwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfQUNLX0ZBSUwgPSA3MSxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MzX0FDS19GQUlMID0gNzIsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWSA9IDczLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzFfRlJBTUVfUkVUUlkgPSA3NCxcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MyX0ZSQU1FX1JFVFJZID0gNzUsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTM19GUkFNRV9SRVRSWSA9IDc2LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMiA9IDc3LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzFfRlJBTUVfUkVUUllfMiA9IDc4LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzJfRlJBTUVfUkVUUllfMiA9IDc5LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzNfRlJBTUVfUkVUUllfMiA9IDgwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0ExX1NFQVJDSCA9IDgxLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX0RST1BfTVBEVSA9IDgyLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX1VOV0FOVEVEID0gODMsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfRkNTX09LID0gODQsXG4rXHRVTklfQ01EX01JQl9DTlRfU1VfVFhfT0sgPSA4NSxcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9GVUxMX0JXID0gODYsXG4rXHRVTklfQ01EX01JQl9DTlRfVFhfQVVUT19CVyA9IDg3LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9TQU1QTEVfSURMRSA9IDg4LFxuK1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9TQU1QTEVfQUNUSVZFID0gODksXG4rXHRVTklfQ01EX01JQl9DTlRfQ0NBX1RJTUUgPSA5MCxcbitcdFVOSV9DTURfTUlCX0NOVF9TXzIwQldfQ0NBX1RJTUUgPSA5MSxcbitcdFVOSV9DTURfTUlCX0NOVF9TXzQwQldfQ0NBX1RJTUUgPSA5MixcbitcdFVOSV9DTURfTUlCX0NOVF9TXzgwQldfQ0NBX1RJTUUgPSA5MyxcbitcdFVOSV9DTURfTUlCX0NOVF9TXzE2MEJXX0NDQV9USU1FID0gOTQsXG4rXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18wX0VEX1RJTUUgPSA5NSxcbitcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzFfRURfVElNRSA9IDk2LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMl9FRF9USU1FID0gOTcsXG4rXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18zX0VEX1RJTUUgPSA5OCxcbitcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzRfRURfVElNRSA9IDk5LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfNV9FRF9USU1FID0gMTAwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfNl9FRF9USU1FID0gMTAxLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfN19FRF9USU1FID0gMTAyLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfOF9FRF9USU1FID0gMTAzLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfOV9FRF9USU1FID0gMTA0LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTBfRURfVElNRSA9IDEwNSxcbitcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzExX0VEX1RJTUUgPSAxMDYsXG4rXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xMl9FRF9USU1FID0gMTA3LFxuK1x0VU5JX0NNRF9NSUJfQ05UX1NfUDIwQldfMTNfRURfVElNRSA9IDEwOCxcbitcdFVOSV9DTURfTUlCX0NOVF9TX1AyMEJXXzE0X0VEX1RJTUUgPSAxMDksXG4rXHRVTklfQ01EX01JQl9DTlRfU19QMjBCV18xNV9FRF9USU1FID0gMTEwLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzMyME1IWiA9IDExMSxcbitcdFVOSV9DTURfTUlCX0NOVF9UWF9ERExNVF9STkcwID0gMTEyLCAvKiBSbmcwflJuZzQgMTEyfjExNiAqL1xuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUllfMyA9IDExNywgLyogMTE3fjEyMCAqL1xuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfVFggPSAxMjEsIC8qIDEyMX4xMjQgKi9cbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYX0RBVEEgPSAxMjUsIC8qIDEyNX4xMjggKi9cbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX1RYX0JZVEUgPSAxMjksIC8qIDEyOX4xMzIgKi9cbitcdFVOSV9DTURfTUlCX0NOVF9SWF9PS19CU1MwID0gMTMzLCAvKiAxMzN+MTM2ICovXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfQllURV9CU1MwID0gMTM3LCAvKiAxMzd+MTQwICovXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfREFUQV9CU1MwID0gMTQxLCAvKiAxNDF+MTQ0ICovXG4rXHRVTklfQ01EX01JQl9DTlRfTUJTUzBfVFhfT0sgPSAxNDUsIC8qIDE0NX4xNjAgKi9cbitcdFVOSV9DTURfTUlCX0NOVF9NQlNTMF9UWF9CWVRFID0gMTYxLCAvKiAxNjF+MTc2ICovXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfT0tfTUJTUzAgPSAxNzcsIC8qIDE3N34xOTIgKi9cbitcdFVOSV9DTURfTUlCX0NOVF9SWF9CWVRFX01CU1MwID0gMTkzLCAvKiAxOTN+MjA4ICovXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFUgPSAyMDksXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSA9IDIxMCxcbitcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9BQ0tFRCA9IDIxMSxcbitcdFVOSV9DTURfTUlCX0NOVF9NQVhfTlVNXG4rfTtcbitcbitlbnVtIEVOVU1fVU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUcge1xuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQkFTSUMgPSAwLFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfTElOS19RVUFMSVRZID0gMSxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX1NUQSA9IDIsXG4rXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CVUdfUkVQT1JUID0gMyxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0VNTF9TVEFUUyA9IDYsXG4rXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19SRUdVTEFSX1NUQVRTID0gNyxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JTU19MSU5LX1FVQUxJVFkgPSA4LFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfR0VUX01MX0NITkxfQ09ORCA9IDksXG4rXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19TVEFUX1dUQkwgPSAxMCxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0xJTktfTEFZRVJfU1RBVFMgPSAweDgwLFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfUFBEVV9MQVRFTkNZLFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQ1VSUkVOVF9UWF9SQVRFLFxuK1x0VU5JX0NNRF9HRVRfU1RBVElTVElDU19UQUdfQkVBQ09OX1JFUE9SVCA9IDB4ODYsXG4rXHRVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19CU1NfQ1VSUkVOVF9UWF9SQVRFID0gMHg4NyxcbitcdFVOSV9DTURfR0VUX1NUQVRJU1RJQ1NfVEFHX0JTU19QUkVEX1RYX0JJVFJBVEUgPSAweDg4LFxuK307XG4rXG4gI2RlZmluZSBVTklfV09XX0RFVEVDVF9UWVBFX01BR0lDXHRcdEJJVCgwKVxuICNkZWZpbmUgVU5JX1dPV19ERVRFQ1RfVFlQRV9BTllcdFx0XHRCSVQoMSlcbiAjZGVmaW5lIFVOSV9XT1dfREVURUNUX1RZUEVfRElTQ09OTkVDVFx0XHRCSVQoMilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlXG5pbmRleCBmOWRjYzBiYmEzOTNjLi4zODYzYTg5Yjg5NzQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlXG5AQCAtNCw3ICs0LDcgQEAgb2JqLSQoQ09ORklHX01UNzkyNV9DT01NT04pICs9IG10NzkyNS1jb21tb24ub1xuIG9iai0kKENPTkZJR19NVDc5MjVFKSArPSBtdDc5MjVlLm9cbiBvYmotJChDT05GSUdfTVQ3OTI1VSkgKz0gbXQ3OTI1dS5vXG4gXG4tbXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xuK210NzkyNS1jb21tb24teSA6PSBtYWMubyBtY3UubyByZWdkLm8gbWFpbi5vIGluaXQubyBkZWJ1Z2ZzLm8gbmFuLm8gc3RhdHMub1xuIG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub1xuIG10NzkyNWUteSA6PSBwY2kubyBwY2lfbWFjLm8gcGNpX21jdS5vXG4gbXQ3OTI1dS15IDo9IHVzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG5pbmRleCBkMDFmZjQ5ZGU0N2FmLi43YTQwZDVhYzQ3ZGFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbkBAIC0xLDggKzEsMTEgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gLyogQ29weXJpZ2h0IChDKSAyMDIzIE1lZGlhVGVrIEluYy4gKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwibXQ3OTI1LmhcIlxuICNpbmNsdWRlIFwibWN1LmhcIlxuKyNpbmNsdWRlIFwic3RhdHMuaFwiXG4gXG4gc3RhdGljIGludFxuIG10NzkyNV9yZWdfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG5AQCAtMjg2LDYgKzI4OSwzNDYgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIFxuIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgXCIlbGxkXFxuXCIpO1xuIFxuK3N0YXRpYyBjb25zdCB1MzIgc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzW10gPSB7XG4rXHRVTklfQ01EX01JQl9DTlRfUlhfRkNTX0VSUixcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1JYX01QRFUsXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfUlhfQ09VTlQsXG4rXHRVTklfQ01EX01JQl9DTlRfUEZfRFJPUCxcbitcdFVOSV9DTURfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXG4rXHRVTklfQ01EX01JQl9DTlRfQ0hBTk5FTF9JRExFLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0NDQV9OQVZfVFhfVElNRSxcbitcdFVOSV9DTURfTUlCX0NOVF9NRFJEWSxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9DQ0tfTURSRFlfVElNRSxcbitcdFVOSV9DTURfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUUsXG4rXHRVTklfQ01EX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1BfQ0NBX1RJTUUsXG4rXHRVTklfQ01EX01JQl9DTlRfU19DQ0FfVElNRSxcbitcdFVOSV9DTURfTUlCX0NOVF9QX0VEX1RJTUUsXG4rXHRVTklfQ01EX01JQl9DTlRfQkNOX1RYLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzQwTUhaLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzgwTUhaLFxuK1x0VU5JX0NNRF9NSUJfQ05UX1RYX0JXXzE2ME1IWixcbitcdFVOSV9DTURfTUlCX0NOVF9CU1MwX0JBX01JU1MsXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfRlJBTUVfUkVUUlksXG4rXHRVTklfQ01EX01JQl9DTlRfQlNTMF9GUkFNRV9SRVRSWV8yLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxuK1x0VU5JX0NNRF9NSUJfQ05UX0JTUzBfQUNLX0ZBSUwsXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFUsXG4rXHRVTklfQ01EX01JQl9DTlRfQU1QRFVfTVBEVSxcbitcdFVOSV9DTURfTUlCX0NOVF9BTVBEVV9BQ0tFRCxcbit9O1xuK1xuKy8qIER1bXAgdGhlIHdob2xlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSBhbmQgbWFyayB0aGUgZW50cnkgY3VycmVudGx5IGluIHVzZVxuKyAqIHdpdGggXCItLVx1MDAzZVwiXG4rICovXG4rc3RhdGljIHZvaWRcbittdDc5MjVfZHVtcF9hdXRvX3JhdGVfdGFibGUoc3RydWN0IHNlcV9maWxlICpzLFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IpXG4re1xuK1x0dTggZmNhcCA9IHdyLVx1MDAzZWZjYXA7XG4rXHR1OCByYXRlX2lkeCA9IHdyLVx1MDAzZXJhdGVfaWR4O1xuK1x0dTggY2JybiA9IHdyLVx1MDAzZWNicm47XG4rXHRpbnQgaTtcbitcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgQ3VyIFJhdGUgSW5kZXggPSAldVxcblwiLCBcIiBcIiwgcmF0ZV9pZHgpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3OTI1X0FVVE9fUkFURV9OVU07IGkrKykge1xuK1x0XHR1MTYgcmF0ZV9jb2RlID0gbGUxNl90b19jcHUod3ItXHUwMDNlcmF0ZV9jb2RlW2ldKTtcbitcdFx0dTggdHhtb2RlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTU9ERShyYXRlX2NvZGUpO1xuK1x0XHR1OCByYXRlID0gTVQ3OTI1X0hXX1JBVEVfVE9fTUNTKHJhdGVfY29kZSk7XG4rXHRcdHU4IG5zdHMgPSBNVDc5MjVfSFdfUkFURV9UT19OU1MocmF0ZV9jb2RlKSArIDE7XG4rXHRcdHU4IHN0YmMgPSBNVDc5MjVfSFdfUkFURV9UT19TVEJDKHJhdGVfY29kZSk7XG4rXHRcdHU4IGRjbSA9IE1UNzkyNV9IV19SQVRFX1RPX0RDTShyYXRlX2NvZGUpO1xuK1x0XHR1OCBlcnN1MTA2dCA9IE1UNzkyNV9IV19SQVRFX1RPXzEwNlQocmF0ZV9jb2RlKTtcbitcdFx0dTggc2dpID0gbXQ3OTI1X3d0YmxfZ2V0X3NnaSh3ciwgdHhtb2RlLCBmY2FwKTtcbitcdFx0dTggbGRwYyA9IG10NzkyNV93dGJsX2dldF9sZHBjKHdyLCB0eG1vZGUpO1xuK1x0XHRjb25zdCBjaGFyICptb2RlX3N0ciA9IFwiTi9BXCI7XG4rXG4rXHRcdGlmIChkY20pXG4rXHRcdFx0cmF0ZSA9IE1UNzkyNV9IV19SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XG4rXHRcdGlmIChlcnN1MTA2dClcbitcdFx0XHRyYXRlID0gTVQ3OTI1X0hXX1JBVEVfVU5NQVNLXzEwNlQocmF0ZSk7XG4rXG4rXHRcdGlmICh0eG1vZGUgXHUwMDNjIEFSUkFZX1NJWkUobXQ3OTI1X3R4X21vZGVfc3RyKSlcbitcdFx0XHRtb2RlX3N0ciA9IG10NzkyNV90eF9tb2RlX3N0clt0eG1vZGVdO1xuK1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiUmF0ZSBpbmRleFslZF0gICAgJXNcIiwgaSxcbitcdFx0XHQgICByYXRlX2lkeCA9PSBpID8gXCItLVx1MDAzZSBcIiA6IFwiICAgIFwiKTtcbitcbitcdFx0LyogcmF0ZS9NQ1MgZmllbGQgKi9cbitcdFx0aWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSylcbitcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLFxuK1x0XHRcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltyYXRlIFx1MDAyNiAweDNdKTtcbitcdFx0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSlcbitcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLCBtdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cihyYXRlKSk7XG4rXHRcdGVsc2UgaWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYIHx8XG4rXHRcdFx0IHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0YpXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIk1DUyVkLCBcIiwgcmF0ZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJXMlZF9NQ1MlZCwgXCIsXG4rXHRcdFx0XHQgICBzdGJjID8gXCJOU1RTXCIgOiBcIk5TU1wiLCBuc3RzLCByYXRlKTtcbitcbitcdFx0LyogYmFuZHdpZHRoOiBtaXJyb3IgdGhlIENDSy9PRkRNIC1cdTAwM2UgQlcyMCBhbmQgY2JybiBoYW5kbGluZyAqL1xuK1x0XHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLIHx8XG4rXHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuK1x0XHRcdHNlcV9wcmludGYocywgXCIlcywgXCIsIG10NzkyNV90eF9yYXRlX2J3X3N0clswXSk7XG4rXHRcdGVsc2UgaWYgKGkgXHUwMDNlIGNicm4pXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIiVzLCBcIixcbitcdFx0XHRcdCAgIGZjYXAgXHUwMDNjIDUgP1xuK1x0XHRcdFx0ICAgKGZjYXAgXHUwMDNlIE1UNzkyNV9CV18yMCA/XG4rXHRcdFx0XHQgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXAgLSAxXSA6XG4rXHRcdFx0XHQgICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZjYXBdKSA6XG4rXHRcdFx0XHQgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbNV0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIiVzLCBcIixcbitcdFx0XHRcdCAgIGZjYXAgXHUwMDNjIDUgPyBtdDc5MjVfdHhfcmF0ZV9id19zdHJbZmNhcF0gOlxuK1x0XHRcdFx0ICAgbXQ3OTI1X3R4X3JhdGVfYndfc3RyWzVdKTtcbitcbitcdFx0LyogR0kgLyBwcmVhbWJsZSAqL1xuK1x0XHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxuK1x0XHRcdHNlcV9wcmludGYocywgXCIlcywgXCIsIHJhdGUgXHUwMDNjIDQgPyBcIkxQXCIgOiBcIlNQXCIpO1xuK1x0XHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuK1x0XHRcdDsgLyogT0ZETSBoYXMgbm8gR0kvcHJlYW1ibGUgdG8gcHJpbnQgKi9cbitcdFx0ZWxzZSBpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRNSVggfHxcbitcdFx0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiB8fFxuK1x0XHRcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9WSFQgfHxcbitcdFx0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfUExSKVxuK1x0XHRcdHNlcV9wcmludGYocywgXCIlcywgXCIsIHNnaSA9PSAwID8gXCJMR0lcIiA6IFwiU0dJXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIiVzLCBcIixcbitcdFx0XHRcdCAgIHNnaSA9PSAwID8gXCJTR0lcIiA6XG4rXHRcdFx0XHQgICAoc2dpID09IDEgPyBcIk1HSVwiIDogXCJMR0lcIikpO1xuK1xuK1x0XHQvKiBtb2RlLCBEQ00sIDEwNnQsIFNUQkMsIGNvZGluZyAqL1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXMlcyVzJXMlc1xcblwiLFxuK1x0XHRcdCAgIG1vZGVfc3RyLFxuK1x0XHRcdCAgIGRjbSA/IFwiLCBEQ01cIiA6IFwiXCIsIGVyc3UxMDZ0ID8gXCIsIDEwNnRcIiA6IFwiXCIsXG4rXHRcdFx0ICAgc3RiYyA/IFwiLCBTVEJDLCBcIiA6IFwiLCBcIixcbitcdFx0XHQgICAobGRwYyA9PSAwIHx8XG4rXHRcdFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSyB8fFxuK1x0XHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKSA/XG4rXHRcdFx0ICAgXCJCQ0NcIiA6IFwiTERQQ1wiKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBtdDc5Mnhfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxuK3tcbitcdHM4IHJzc2kgPSAwO1xuK1x0dTggYmFuZF9pZHggPSAwO1xuK1x0Ym9vbCB3dGJsX3JhdGVfdmFsaWQgPSBmYWxzZTtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IGkgPSAwO1xuK1x0dTMyIHN0YXRzX3ZhbHVlID0gMDtcbitcdHUzMiB0eF9saW5rX3NwZWVkX2ticHMgPSAwO1xuK1x0dTY0IHR4X3RvdGFsID0gMDtcbitcdHU2NCB0eF9mYWlsID0gMDtcbitcdHU2NCB0eF9wZXIgPSAwO1xuK1x0dTMyIHR4X3Blcl9yZW0gPSAwO1xuK1x0LyogVU5JX0NNRF9NSUJfREFUQSAqL1xuK1x0dTY0IG1pYl92YWx1ZXNbQVJSQVlfU0laRShzdGF0c19xdWVyeV9taWJfY291bnRlcnMpXTtcbitcdHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy1cdTAwM2Vwcml2YXRlKTtcbitcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlIHd0YmxfcmF0ZTtcbitcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cyA9IE5VTEw7XG4rXG4rXHRiYW5kX2lkeCA9IGRldi1cdTAwM2VtcGh5LmJhbmRfaWR4O1xuK1xuK1x0IHN0YXRzID0ga3phbGxvYyhzaXplb2YoKnN0YXRzKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXN0YXRzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdC8qIEdldCBTVEFfU1RBVFMgKi9cbitcdG10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7XG4rXHRyZXQgPSBtdDc5MnhfbWN1X2dldF9zdGF0KGRldiwgc3RhdHMpO1xuK1x0bXQ3OTJ4X211dGV4X3JlbGVhc2UoZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogR2V0IE1JQl9TVEFUUyAqL1xuK1x0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcbitcdHJldCA9IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKGRldiwgYmFuZF9pZHgsIHN0YXRzX3F1ZXJ5X21pYl9jb3VudGVycyxcbitcdFx0XHRcdCAgICAgIEFSUkFZX1NJWkUoc3RhdHNfcXVlcnlfbWliX2NvdW50ZXJzKSwgbWliX3ZhbHVlcyk7XG4rXHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBHZXQgTGlua19TcGVlZCBhbmQgUlNTSSAqL1xuK1x0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcbitcdHJldCA9IG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eShkZXYsIHN0YXRzLVx1MDAzZWJzc19pZHgsIFx1MDAyNnJzc2ksIFx1MDAyNnR4X2xpbmtfc3BlZWRfa2Jwcyk7XG4rXHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBHZXQgdGhlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSAoYmVzdCBlZmZvcnQ7IGRvIG5vdCBhYm9ydCB0aGVcbitcdCAqIHdob2xlIHN0YXRzIGR1bXAgaWYgdGhlIFdUQkwgcXVlcnkgaXMgbm90IGF2YWlsYWJsZSkuXG4rXHQgKi9cbitcdG10NzkyeF9tdXRleF9hY3F1aXJlKGRldik7XG4rXHRpZiAoIW10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZShkZXYsIHN0YXRzLVx1MDAzZXd0YmxfaWR4LCBcdTAwMjZ3dGJsX3JhdGUpKVxuK1x0XHR3dGJsX3JhdGVfdmFsaWQgPSB0cnVlO1xuK1x0bXQ3OTJ4X211dGV4X3JlbGVhc2UoZGV2KTtcbitcbitcdC8qIFByaW50IFNUQV9TVEFUUyBpbmZvICovXG4rXHRzZXFfcHJpbnRmKHMsIFwiKFNUQSkgY29ubmVjdGVkIEFQIE1BQyBBZGRyZXNzID0gJXBNXFxuXCIsIHN0YXRzLVx1MDAzZW1hY19hZGRyKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgQnNzSWR4ID0gWyV1XVxcblwiLCBcIiBcIiwgc3RhdHMtXHUwMDNlYnNzX2lkeCk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFN0YVJlY0lkeCA9IFsldV1cXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZXN0YV9pZHgpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBSU1NJID0gJWRcXG5cIiwgXCIgXCIsIHJzc2kpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBMaW5rX1NwZWVkID0gJXUgKGtiaXQvcylcXG5cIiwgXCIgXCIsIHR4X2xpbmtfc3BlZWRfa2Jwcyk7XG4rXG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIHRlbXBlcmF0dXJlID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZXRlbXBlcmF0dXJlKTtcbitcbitcdHN0YXRzX3ZhbHVlID0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHJhbnNtaXRfY291bnQpIC0gbGUzMl90b19jcHUoc3RhdHMtXHUwMDNldHJhbnNtaXRfZmFpbF9jb3VudCk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFR4IHN1Y2Nlc3MgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgc3RhdHNfdmFsdWUpO1xuK1xuK1x0c3RhdHNfdmFsdWUgPSBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2V0eF9mYWlsX2NvdW50KSAtIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZXR4X2xpZmVfdGltZW91dF9jb3VudCk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFR4IGZhaWwgdG8gUmN2IEFDSyBhZnRlciByZXRyeSA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0c192YWx1ZSk7XG4rXG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJ4IE1wZHUgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5yeF9tcGR1X2NudCkpO1xuK1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBSeCBGY3MgRXJyb3IgPSAldSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0uZmNzX2Vycm9yKSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJ4IEZJRk8gZnVsbCA9ICV1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5yeF9maWZvX2Z1bGwpKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFX01BWF9OVU07IGkrKylcbitcdFx0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBUUlhfQUdHX1JBTkdFWyVkXSA9ICV1IChQUERVKVxcblwiLFxuK1x0XHRcdCAgIFwiIFwiLCBpLCBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2VtaWJbYmFuZF9pZHhdLnR4X3JhbmdlX2FtcGR1X2NudFtpXSkpO1xuK1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBNUERVcyBpbiBBTVBEVXMgdHJhbnNtaXR0ZWQgPSAldSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIGxlMzJfdG9fY3B1KHN0YXRzLVx1MDAzZW1pYltiYW5kX2lkeF0uYW1wZHVfdHhfc2ZfY250KSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIE1QRFVzIGluIEFNUERVcyB0cmFuc21pdHRlZCB3aXRoIEFDSyByZXBseSA9ICV1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlbWliW2JhbmRfaWR4XS5hbXBkdV90eF9hY2tfc2ZfY250KSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIHJhdGUxX3R4X2NudCA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBsZTMyX3RvX2NwdShzdGF0cy1cdTAwM2VyYXRlMV90eF9jbnQpKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgcmF0ZTFfZmFpbF9jbnQgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUzMl90b19jcHUoc3RhdHMtXHUwMDNlcmF0ZTFfZmFpbF9jbnQpKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgdHJhaW5fdXAgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbGUxNl90b19jcHUoc3RhdHMtXHUwMDNldHJhaW5fdXApKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgdHJhaW5fZG93biA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBsZTE2X3RvX2NwdShzdGF0cy1cdTAwM2V0cmFpbl9kb3duKSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIGlzX2ZvcmNlX3R4X3N0cmVhbSA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0cy1cdTAwM2Vpc19mb3JjZV90eF9zdHJlYW0pO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBpc19mb3JjZV9zZV9vZmYgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgc3RhdHMtXHUwMDNlaXNfZm9yY2Vfc2Vfb2ZmKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgbWF4X2FtcGR1X2ZhY3RvciA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0cy1cdTAwM2VtYXhfYW1wZHVfZmFjdG9yKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgdHhfcmF0ZV91cF9wZW5hbHR5ID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZXR4X3JhdGVfdXBfcGVuYWx0eSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIGxvd190cmFmZmljX21vZGUgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgc3RhdHMtXHUwMDNlbG93X3RyYWZmaWNfbW9kZSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIGxvd190cmFmZmljX2NvdW50ID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZWxvd190cmFmZmljX2NvdW50KTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgbG93X3RyYWZmaWNfZGFzaGJvYXJkID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZWxvd190cmFmZmljX2Rhc2hib2FyZCk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIGR5bmFtaWNfc2dpX3N0YXRlID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZWR5bmFtaWNfc2dpX3N0YXRlKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgZHluYW1pY19zZ2lfc2NvcmUgPSAldVxcblwiLFxuK1x0XHQgICBcIiBcIiwgc3RhdHMtXHUwMDNlZHluYW1pY19zZ2lfc2NvcmUpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBkeW5hbWljX2J3X3N0YXRlID0gJXVcXG5cIixcbitcdFx0ICAgXCIgXCIsIHN0YXRzLVx1MDAzZWR5bmFtaWNfYndfc3RhdGUpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0cy1cdTAwM2VkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIHZodF9ub25fc3BfcmF0ZV9zdGF0ZSA9ICV1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBzdGF0cy1cdTAwM2V2aHRfbm9uX3NwX3JhdGVfc3RhdGUpO1xuK1xuK1x0LyogRGVjb2RlIHRoZSBUWCBWZWN0b3IgQkJQIGxhdGNoIHRvIHNob3cgdGhlIGN1cnJlbnQgVFggTUNTIHJhdGUgKi9cbitcdGlmIChiYW5kX2lkeCBcdTAwM2MgTVQ3OTI1X1NUQV9TVEFUU19CQU5EX05VTSlcbitcdFx0bXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZShzLCBzdGF0cy1cdTAwM2V0eF92ZWN0b3JbYmFuZF9pZHhdLnR4dik7XG4rXG4rXHQvKiBEdW1wIHRoZSB3aG9sZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgYW5kIG1hcmsgdGhlIGVudHJ5IGN1cnJlbnRseSAqL1xuK1x0aWYgKHd0YmxfcmF0ZV92YWxpZClcbitcdFx0bXQ3OTI1X2R1bXBfYXV0b19yYXRlX3RhYmxlKHMsIFx1MDAyNnd0YmxfcmF0ZSk7XG4rXG4rXHRzZXFfcHV0cyhzLCBcIlxcbm1pYiBzdGF0ZTpcXG5cIik7XG4rXHQvKiA9PT1SeCBSZWxhdGVkIENvdW50ZXJzPT09ICovXG4rXHRzZXFfcHV0cyhzLCBcIj09PSBSeCBSZWxhdGVkIENvdW50ZXJzID09PVxcblwiKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnggd2l0aCBDUkMgPSAlbGx1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1JYX0ZDU19FUlJdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlID0gJWxsdSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9GSUZPX09WRVJGTE9XXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJ4IE1wZHUgPSAlbGx1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1JYX01QRFVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnggQU1wZHUgPSAlbGx1IChQUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0FNUERVX1JYX0NPVU5UXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJ4IFBGIERyb3AgPSAlbGx1IChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1BGX0RST1BdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnggTGVuIE1pc21hdGNoID0gJWxsdSAoUFBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9MRU5fTUlTTUFUQ0hdKTtcbitcbitcdC8qID09PVBoeS9UaW1pbmcgUmVsYXRlZCBDb3VudGVycz09PSAqL1xuK1x0c2VxX3B1dHMocywgXCJcXG49PT0gUGh5L1RpbWluZyBSZWxhdGVkIENvdW50ZXJzID09PVxcblwiKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgQ2hhbm5lbElkbGVDbnQgPSAlbGx1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQ0hBTk5FTF9JRExFXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIENDQV9OQVZfVHhfVGltZSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9DQ0FfTkFWX1RYX1RJTUVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUnhfTURSRFlfQ05UID0gJWxsdSAoUFBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9NRFJEWV0pO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBDQ0tfTURSRFkgPSAlbGx1XFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgT0ZETV9NRFJEWSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0xHX01JWEVEX01EUkRZX1RJTUVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgT0ZETV9HUkVFTl9NRFJEWSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9SWF9PRkRNX0dSRUVOX01EUkRZX1RJTUVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUHJpbSBDQ0EgVGltZSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0NDQV9USU1FXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFNlYyBDQ0EgVGltZSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9TX0NDQV9USU1FXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFByaW0gRUQgVGltZSA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9QX0VEX1RJTUVdKTtcbitcbitcdC8qID09PVR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYyk9PT0gKi9cbitcdHNlcV9wdXRzKHMsIFwiXFxuPT09IFR4IFJlbGF0ZWQgQ291bnRlcnMoR2VuZXJpYykgPT09XFxuXCIpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBCZWFjb25UeENudCA9ICVsbHVcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CQ05fVFhdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgVHggNDBNSHogQ250ID0gJWxsdSAgKE1QRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfNDBNSFpdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgVHggODBNSHogQ250ID0gJWxsdSAgKE1QRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfVFhfQldfODBNSFpdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgVHggMTYwTUh6IENudCA9ICVsbHUgIChNUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX1RYX0JXXzE2ME1IWl0pO1xuK1xuK1x0LyogPT09QlNTSURbMF0gUmVsYXRlZCBDb3VudGVycz09PSAqL1xuK1x0c2VxX3B1dHMocywgXCJcXG49PT0gQlNTSURbMF0gUmVsYXRlZCBDb3VudGVycyA9PT1cXG5cIik7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIEJBIE1pc3MgQ250ID0gJWxsdSAgKFBQRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9CQV9NSVNTXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIFJUUyBUeCBDbnQgPSAlbGx1ICAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX1JUU19UWF9DTlRdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgRnJhbWUgUmV0cnkgQ250ID0gJWxsdSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXSk7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgIEZyYW1lIFJldHJ5IDIgQ250ID0gJWxsdSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzJdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgUlRTIFJldHJ5IENudCA9ICVsbHUgKE1QRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQlNTMF9SVFNfUkVUUlldKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgQWNrIEZhaWxlZCBDbnQgPSAlbGx1IChQUERVKVxcblwiLFxuK1x0XHQgICBcIiBcIiwgbWliX3ZhbHVlc1tRVUVSWV9NSUJfQ05UX0JTUzBfQUNLX0ZBSUxdKTtcbitcbitcdC8qID09PUFNUERVIFJlbGF0ZWQgQ291bnRlcnM9PT0gKi9cbitcdHNlcV9wdXRzKHMsIFwiXFxuPT09IEFNUERVIFJlbGF0ZWQgQ291bnRlcnMgPT09XFxuXCIpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBUeCBBTVBEVV9Qa3RfQ250ID0gJWxsdSAgKFBQRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVdKTtcbitcdHNlcV9wcmludGYocywgXCIlLTIycyAgVHggQU1QRFVfTVBEVV9Qa3RfQ250ID0gJWxsdSAgKE1QRFUpXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV0pO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBBTVBEVSBUeCBzdWNjZXNzID0gJWxsdSAoTVBEVSlcXG5cIixcbitcdFx0ICAgXCIgXCIsIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF0pO1xuK1xuK1x0dHhfdG90YWwgPSBtaWJfdmFsdWVzW1FVRVJZX01JQl9DTlRfQU1QRFVfTVBEVV07XG4rXHR0eF9mYWlsID0gIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9NUERVXSAtIG1pYl92YWx1ZXNbUVVFUllfTUlCX0NOVF9BTVBEVV9BQ0tFRF07XG4rXHR0eF9wZXIgPSB0eF90b3RhbCA9PSAwID8gMCA6IGRpdjY0X3U2NCgxMDAwICogdHhfZmFpbCwgdHhfdG90YWwpO1xuK1x0c2VxX3ByaW50ZihzLCBcIiUtMjJzICBBTVBEVSBUeCBmYWlsIGNvdW50ICAgPSAlbGx1ICAoTVBEVSksIFBFUj0lbGx1LiUxbGx1JSVcXG5cIixcbitcdFx0ICAgXCIgXCIsXG4rXHRcdCAgIHR4X2ZhaWwsXG4rXHRcdCAgIGRpdl91NjRfcmVtKHR4X3BlciwgMTAsIFx1MDAyNnR4X3Blcl9yZW0pLCAodTY0KXR4X3Blcl9yZW0pO1xuK1xuK291dDpcbitcdGtmcmVlKHN0YXRzKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGlyO1xuQEAgLTMxMyw1ICs2NTYsOCBAQCBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuIFx0XHRcdFx0ICAgIG10NzkyeF9wbV9zdGF0cyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiZGVlcC1zbGVlcFwiLCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19kcyk7XG4gXG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LVx1MDAzZW10NzYuZGV2LCBcInN0YXRzXCIsIGRpcixcbitcdFx0XHRcdCAgICBtdDc5Mnhfc3RhdHMpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWE0Nzk1MzA2MmJjM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuY1xuQEAgLTAsMCArMSw1ODUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4rLyogQ29weXJpZ2h0IChDKSAyMDI2IE1lZGlhVGVrIEluYy4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwibXQ3OTI1LmhcIlxuKyNpbmNsdWRlIFwibWN1LmhcIlxuKyNpbmNsdWRlIFwibWFjLmhcIlxuKyNpbmNsdWRlIFwic3RhdHMuaFwiXG4rXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX1ZFUlNJT04gMVxuKyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19WQUxJRCAxVVxuK1xuKyNkZWZpbmUgTVQ3OTI1X01JQl9NQVhfQ05UXHRcdFx0MzJcbisjZGVmaW5lIE1UNzkyNV9NSUJfQ05UX01BWF9OVU1cdFx0NTEyICAvKiBmaXJtd2FyZSBVTklfQ01EX01JQl9DTlRfTUFYX05VTSB1cHBlciBib3VuZCAqL1xuK1xuKyNkZWZpbmUgTVQ3OTI1X0xRX0JBTkRfTlVNXHQ0XHRcdFx0LyogTGluayBxdWFsaXR5IGJhbmQgKi9cbitcbitjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X21vZGVfc3RyW10gPSB7XG4rXHRcIkNDS1wiLCBcIk9GRE1cIiwgXCJNTVwiLCBcIkdGXCIsIFwiVkhUXCIsIFwiUExSXCIsXG4rXHRcIlBMUlBcIiwgXCJBTFJcIiwgXCJIRV9TVVwiLCBcIkhFX0VSXCIsIFwiSEVfVFJJR1wiLCBcIkhFX01VXCIsXG4rXHRcIkVIVF9FUlwiLCBcIlRPRlwiLCBcIkVIVF9UUklHXCIsIFwiRUhUX01VXCJcbit9O1xuK1xuK2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW10gPSB7XG4rXHRcIjFNXCIsIFwiMk1cIiwgXCI1LjVNXCIsIFwiMTFNXCIsIFwiTi9BXCJcbit9O1xuK1xuK2NvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9id19zdHJbXSA9IHtcbitcdFwiQlcyMFwiLCBcIkJXNDBcIiwgXCJCVzgwXCIsIFwiQlcxNjAvQlc4MDgwXCIsIFwiQlczMjBcIiwgXCJOL0FcIlxuK307XG4rXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfcmVxIHtcbitcdHU4IHJzdls0XTtcbitcdF9fbGUxNiB0YWc7XG4rXHRfX2xlMTYgbGVuO1xuK1x0dTggc3RhX3JlY19pZHg7XG4rXHR1OCByc3YxO1xuK1x0dTggbGxzX3JlYWRfY2xlYXI7XG4rXHR1OCByZXNldF9jb3VudGVyO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQge1xuK1x0dTggcnN2WzRdO1xuK1x0X19sZTE2IHRhZztcbitcdF9fbGUxNiBsZW47XG4rXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0cyBzdGF0cztcbit9IF9fcGFja2VkO1xuK1xuKy8qIFdUQkwgYXV0by1yYXRlIHJlcXVlc3QgVExWLCBtaXJyb3IgR2VuNG0gc3RydWN0IFVOSV9DTURfU1RBVF9XVEJMLlxuKyAqIFRoZSBSQSB0YWcgcmV1c2VzIFVOSV9DTURfSURfU1RBVElTVElDU19XVEJMICgxMCkuXG4rICovXG4rc3RydWN0IG10NzkyNV93dGJsX3JhdGVfcmVxIHtcbitcdHU4IHJzdls0XTtcbitcdF9fbGUxNiB0YWc7XG4rXHRfX2xlMTYgbGVuO1xuK1x0X19sZTE2IHdsYW5faWR4O1xuK1x0X19sZTE2IHJzdjE7XG4rfSBfX3BhY2tlZDtcbitcbisvKiBXVEJMIGF1dG8tcmF0ZSBldmVudCBUTFYuIEZpcm13YXJlIGFuc3dlcnMgY21kIHRhZyAxMCB3aXRoIGV2ZW50IHRhZyAxMi4gKi9cbitzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZV9ldmVudCB7XG4rXHR1OCByc3ZbNF07XG4rXHRzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSByYXRlO1xuK30gX19wYWNrZWQ7XG4rXG4rLyogZml4ZWQgZmllbGQsIG1pcnJvciBVTklfKENNRHxFVkVOVClfTUlCX0lORk8gKi9cbitzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIge1xuK1x0dTggYmFuZF9pZHg7XG4rXHR1OCByc3ZbM107XG4rfSBfX3BhY2tlZDtcbitcbisvKiBPbmUgcmVxdWVzdGVkL3JldHVybmVkIE1JQiBjb3VudGVyLCBtaXJyb3IgVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBX1QuICovXG4rc3RydWN0IG10NzkyNV9taWJfZGF0YSB7XG4rXHRfX2xlMTYgdGFnO1x0LyogVU5JXyhDTUR8RVZFTlQpX01JQl9EQVRBID0gMCAqL1xuK1x0X19sZTE2IGxlbjtcbitcdF9fbGUzMiBjb3VudGVyO1x0LyogTUlCIGNvdW50ZXIgSUQgKGVudW0gbXQ3OTI1X21pYl9jb3VudGVyKSAqL1xuK1x0X19sZTY0IGRhdGE7XHQvKiBvbmx5IHZhbGlkIG9uIGV2ZW50OyBpZ25vcmVkIG9uIGNtZCAqL1xuK30gX19wYWNrZWQ7XG4rXG4rLyogcGVyLWJhbmQgbGluayBxdWFsaXR5IGVudHJ5LCBtaXJyb3IgVU5JX0xJTktfUVVBTElUWSAqL1xuK3N0cnVjdCBtdDc5MjVfbGlua19xdWFsaXR5IHtcbitcdHM4IHJzc2k7XHRcdC8qIG1vdmluZy1hdmVyYWdlIGJlYWNvbiBSU1NJIG9mIGNvbm5lY3RlZCBBUCAqL1xuK1x0czggbGlua19xdWFsaXR5O1x0LyogYWx3YXlzIDAgKi9cbitcdF9fbGUxNiBsaW5rX3NwZWVkO1x0LyogVFggcmF0ZTEsIHVuaXQgNTAwIEtiL3MgKi9cbitcdHU4IG1lZGl1bV9idXN5X3BjdDtcdC8qIGFsd2F5cyAwICovXG4rXHR1OCBpc19yZWFkeTtcdFx0LyogMDogZmllbGRzIGludmFsaWQsIDE6IHZhbGlkICovXG4rXHR1OCByc3ZbMl07XG4rfSBfX3BhY2tlZDtcbitcbisvKiByZXF1ZXN0IFRMViwgbWlycm9yIFVOSV9DTURfTElOS19RVUFMSVRZIChoZWFkZXIgKyB0YWcvbGVuIG9ubHkpICovXG4rc3RydWN0IG10NzkyNV9scV9yZXEge1xuK1x0dTggcnN2WzRdO1x0XHQvKiBVTklfQ01EX0dFVF9TVEFUSVNUSUNTIGZpeGVkIGZpZWxkICovXG4rXHRfX2xlMTYgdGFnO1x0XHQvKiBVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19MSU5LX1FVQUxJVFkgPSAxICovXG4rXHRfX2xlMTYgbGVuO1xuK30gX19wYWNrZWQ7XG4rXG4rLyogZXZlbnQgVExWLCBtaXJyb3IgVU5JX0VWRU5UX0xJTktfUVVBTElUWSAqL1xuK3N0cnVjdCBtdDc5MjVfbHFfZXZlbnQge1xuK1x0dTggcnN2WzRdO1x0XHQvKiBVTklfRVZFTlRfU1RBVElTVElDUyBmaXhlZCBmaWVsZCAqL1xuK1x0X19sZTE2IHRhZztcdFx0LyogVU5JX0VWRU5UX0lEX1NUQVRJU1RJQ1NfTElOS19RVUFMSVRZID0gMSAqL1xuK1x0X19sZTE2IGxlbjtcbitcdHN0cnVjdCBtdDc5MjVfbGlua19xdWFsaXR5IGxxW01UNzkyNV9MUV9CQU5EX05VTV07XG4rfSBfX3BhY2tlZDtcbitcbitzdGF0aWMgdm9pZFxuK210NzkyNV9nZXRfYXBfc3RhX3JlY19pZHhfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuK3tcbitcdHN0cnVjdCBtdDc5MjVfc3RhX3JlY19sb29rdXAgKmxvb2t1cCA9IGRhdGE7XG4rXHRzdHJ1Y3QgbXQ3OTJ4X3ZpZiAqbXZpZjtcbitcdHN0cnVjdCBtdDc5Mnhfc3RhICptc3RhO1xuK1xuK1x0aWYgKGxvb2t1cC1cdTAwM2VzdGFfcmVjX2lkeCBcdTAwM2U9IDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8ICF2aWYtXHUwMDNlY2ZnLmFzc29jKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtdmlmID0gKHN0cnVjdCBtdDc5MnhfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuK1x0bXN0YSA9IG12aWYtXHUwMDNld2VwX3N0YTtcbitcdGlmICghbXN0YSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFtc3RhLVx1MDAzZWRlZmxpbmsud2NpZC5zdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGxvb2t1cC1cdTAwM2VzdGFfcmVjX2lkeCA9IG1zdGEtXHUwMDNlZGVmbGluay53Y2lkLmlkeDtcbit9XG4rXG4raW50XG4rbXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqc3RhX3JlY19pZHgpXG4re1xuK1x0c3RydWN0IG10NzkyNV9zdGFfcmVjX2xvb2t1cCBsb29rdXAgPSB7XG4rXHRcdC5zdGFfcmVjX2lkeCA9IC0xLFxuK1x0fTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2LVx1MDAzZW10NzYubXV0ZXgpO1xuK1xuK1x0aWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMoZGV2LVx1MDAzZW1waHkuaHcsXG4rXHRcdFx0XHRcdCAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9SRVNVTUVfQUxMLFxuK1x0XHRcdFx0XHQgICAgbXQ3OTI1X2dldF9hcF9zdGFfcmVjX2lkeF9pdGVyLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2bG9va3VwKTtcbitcbitcdGlmIChsb29rdXAuc3RhX3JlY19pZHggXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRU5PVENPTk47XG4rXG4rXHRpZiAobG9va3VwLnN0YV9yZWNfaWR4IFx1MDAzZSBVOF9NQVgpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0KnN0YV9yZWNfaWR4ID0gbG9va3VwLnN0YV9yZWNfaWR4O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIERlY29kZSB0aGUgVFggVmVjdG9yIEJCUCBsYXRjaCBhbmQgcHJpbnQgdGhlIGxhc3QgVFggcmF0ZSAqL1xuK3ZvaWRcbittdDc5MjVfcHJpbnRfbGFzdF90eF9yYXRlKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3QgX19sZTMyIGxlX3R4dlszXSlcbit7XG4rXHRjb25zdCBjaGFyICptb2RlX3N0ciA9IFwiTi9BXCI7XG4rXHR1OCByYXRlLCB0eG1vZGUsIGZybW9kZSwgc2dpLCBsZHBjLCBuc3RzLCBzdGJjLCBzcGUsIGRjbSwgZXJzdTEwNnQ7XG4rXHRzOCB0eHB3ciwgcG9zX3R4cHdyO1xuK1x0dTMyIHR4dlszXTtcbitcbitcdHR4dlswXSA9IGxlMzJfdG9fY3B1KGxlX3R4dlswXSk7XG4rXHR0eHZbMV0gPSBsZTMyX3RvX2NwdShsZV90eHZbMV0pO1xuK1x0dHh2WzJdID0gbGUzMl90b19jcHUobGVfdHh2WzJdKTtcbitcbitcdGlmICh0eHZbMF0gPT0gMHhmZmZmZmZmZikge1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgICVzID0gJXNcXG5cIiwgXCIgXCIsIFwiTGFzdCBUWCBSYXRlXCIsIFwiTi9BXCIpO1xuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgICVzID0gJXNcXG5cIixcbitcdFx0XHQgICBcIiBcIiwgXCJDaGlwIE91dCBUWCBQb3dlclwiLCBcIk4vQVwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmF0ZSA9IE1UNzkyNV9UWFZfR0VUX1RYX1JBVEUodHh2KTtcbitcdHR4bW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX01PREUodHh2KTtcbitcdGZybW9kZSA9IE1UNzkyNV9UWFZfR0VUX1RYX0ZSTU9ERSh0eHYpO1xuK1x0bnN0cyA9IE1UNzkyNV9UWFZfR0VUX1RYX05TVFModHh2KSArIDE7XG4rXHRzZ2kgPSBNVDc5MjVfVFhWX0dFVF9UWF9TR0kodHh2KTtcbitcdGxkcGMgPSBNVDc5MjVfVFhWX0dFVF9UWF9MRFBDKHR4dik7XG4rXHRzdGJjID0gTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyh0eHYpO1xuK1x0dHhwd3IgPSBNVDc5MjVfVFhWX0dFVF9UWF9QV1IodHh2KTtcbitcdHNwZSA9IE1UNzkyNV9UWFZfR0VUX1RYX1NQRV9JRFgodHh2KTtcbitcdGRjbSA9IE1UNzkyNV9UWFZfR0VUX1RYX0RDTSh0eHYpO1xuK1x0ZXJzdTEwNnQgPSBNVDc5MjVfVFhWX0dFVF9UWF8xMDZUKHR4dik7XG4rXG4rXHRpZiAoZGNtKVxuK1x0XHRyYXRlID0gTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS19EQ00ocmF0ZSk7XG4rXHRpZiAoZXJzdTEwNnQpXG4rXHRcdHJhdGUgPSBNVDc5MjVfVFhWX1JBVEVfVU5NQVNLXzEwNlQocmF0ZSk7XG4rXG4rXHRpZiAodHhtb2RlIFx1MDAzYyBBUlJBWV9TSVpFKG10NzkyNV90eF9tb2RlX3N0cikpXG4rXHRcdG1vZGVfc3RyID0gbXQ3OTI1X3R4X21vZGVfc3RyW3R4bW9kZV07XG4rXG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgICVzID0gXCIsIFwiIFwiLCBcIkxhc3QgVFggUmF0ZVwiKTtcbitcbitcdC8qIHJhdGUvTUNTIGZpZWxkICovXG4rXHRpZiAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLKVxuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLFxuK1x0XHRcdCAgIHJhdGUgXHUwMDNjIDQgPyBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW3JhdGVdIDpcbitcdFx0XHQgICAoKChyYXRlIFx1MDAzZT0gNSkgXHUwMDI2XHUwMDI2IChyYXRlIFx1MDAzYz0gNykpID9cbitcdFx0XHQgICAgbXQ3OTI1X3R4X3JhdGVfY2NrX3N0cltyYXRlIC0gNF0gOlxuK1x0XHRcdCAgICBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyWzRdKSk7XG4rXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLCBtdDc5MjVfaHdfcmF0ZV9vZmRtX3N0cihyYXRlKSk7XG4rXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCB8fFxuK1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRilcbitcdFx0c2VxX3ByaW50ZihzLCBcIk1DUyVkLCBcIiwgcmF0ZSk7XG4rXHRlbHNlXG4rXHRcdHNlcV9wcmludGYocywgXCIlcyVkX01DUyVkLCBcIixcbitcdFx0XHQgICBzdGJjID8gXCJOU1RTXCIgOiBcIk5TU1wiLCBuc3RzLCByYXRlKTtcbitcbitcdC8qIGJhbmR3aWR0aCAqL1xuK1x0c2VxX3ByaW50ZihzLCBcIiVzLCBcIixcbitcdFx0ICAgZnJtb2RlIFx1MDAzYyA1ID8gbXQ3OTI1X3R4X3JhdGVfYndfc3RyW2ZybW9kZV0gOlxuK1x0XHQgICBtdDc5MjVfdHhfcmF0ZV9id19zdHJbNV0pO1xuK1xuK1x0LyogR0kgLyBwcmVhbWJsZSAqL1xuK1x0aWYgKHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0NDSylcbitcdFx0c2VxX3ByaW50ZihzLCBcIiVzLCBcIiwgcmF0ZSBcdTAwM2MgNCA/IFwiTFBcIiA6IFwiU1BcIik7XG4rXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9PRkRNKVxuK1x0XHQ7IC8qIE9GRE0gaGFzIG5vIEdJL3ByZWFtYmxlIHRvIHByaW50ICovXG4rXHRlbHNlIGlmICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IVE1JWCB8fFxuK1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiB8fFxuK1x0XHQgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfVkhUIHx8XG4rXHRcdCB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9QTFIpXG4rXHRcdHNlcV9wcmludGYocywgXCIlcywgXCIsIHNnaSA9PSAwID8gXCJMR0lcIiA6IFwiU0dJXCIpO1xuK1x0ZWxzZVxuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJXMsIFwiLFxuK1x0XHRcdCAgIHNnaSA9PSAwID8gXCJTR0lcIiA6IChzZ2kgPT0gMSA/IFwiTUdJXCIgOiBcIkxHSVwiKSk7XG4rXG4rXHQvKiBtb2RlLCBEQ00sIDEwNnQsIFNUQkMsIGNvZGluZywgU1BFICovXG4rXHRzZXFfcHJpbnRmKHMsIFwiJXMlcyVzJXMlcyVzJWRcXG5cIixcbitcdFx0ICAgbW9kZV9zdHIsXG4rXHRcdCAgIGRjbSA/IFwiLCBEQ01cIiA6IFwiXCIsIGVyc3UxMDZ0ID8gXCIsIDEwNnRcIiA6IFwiXCIsXG4rXHRcdCAgIHN0YmMgPyBcIiwgU1RCQywgXCIgOiBcIiwgXCIsIGxkcGMgPT0gMCA/IFwiQkNDXCIgOiBcIkxEUENcIixcbitcdFx0ICAgXCIsIFNQRVwiLCBzcGUpO1xuK1xuK1x0LyogY2hpcCBvdXQgVFggcG93ZXIgKHVuaXQ6IDAuNSBkQm0pICovXG4rXHRwb3NfdHhwd3IgPSAodHhwd3IgXHUwMDNjIDApID8gKH50eHB3ciArIDEpIDogdHhwd3I7XG4rXHRzZXFfcHJpbnRmKHMsIFwiJS0yMnMgICVzID0gJWMlZC4lMWQgZEJtXFxuXCIsXG4rXHRcdCAgIFwiIFwiLCBcIkNoaXAgT3V0IFRYIFBvd2VyXCIsXG4rXHRcdCAgICh0eHB3ciBcdTAwM2MgMCkgPyAnLScgOiAnKycsXG4rXHRcdCAgIChwb3NfdHhwd3IgLyAyKSwgNSAqIChwb3NfdHhwd3IgJSAyKSk7XG4rfVxuK1xuKy8qIEd1YXJkIGludGVydmFsIHVzZWQgZm9yIHRoZSBhdXRvLXJhdGUgZW50cmllcywgbWlycm9yIEdlbjRtXG4rICogY29ubmFjM3hfZ2V0X3NnaV9pbmZvX2Zyb21fZncoKTogcGljayB0aGUgcGVyLW1vZGUvcGVyLUJXIGZsYWcuXG4rICovXG4rdThcbittdDc5MjVfd3RibF9nZXRfc2dpKGNvbnN0IHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICp3ciwgdTggdHhtb2RlLCB1OCBmY2FwKVxuK3tcbitcdGJvb2wgaGUgPSAodHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfU1UgfHxcbitcdFx0ICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgfHxcbitcdFx0ICAgdHhtb2RlID09IE1UNzkyNV9UWF9SQVRFX01PREVfSEVfVFJJRyB8fFxuK1x0XHQgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9NVSk7XG4rXHRib29sIGVodCA9ICh0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfRVIgfHxcbitcdFx0ICAgIHR4bW9kZSA9PSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9UUklHIHx8XG4rXHRcdCAgICB0eG1vZGUgPT0gTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUpO1xuK1xuK1x0aWYgKGVodClcbitcdFx0cmV0dXJuIHdyLVx1MDAzZWdpX2VodDtcbitcbitcdHN3aXRjaCAoZmNhcCkge1xuK1x0Y2FzZSBNVDc5MjVfQldfMjA6XG4rXHRcdHJldHVybiBoZSA/IHdyLVx1MDAzZWcyX2hlIDogd3ItXHUwMDNlZzI7XG4rXHRjYXNlIE1UNzkyNV9CV180MDpcbitcdFx0cmV0dXJuIGhlID8gd3ItXHUwMDNlZzRfaGUgOiB3ci1cdTAwM2VnNDtcbitcdGNhc2UgTVQ3OTI1X0JXXzgwOlxuK1x0XHRyZXR1cm4gaGUgPyB3ci1cdTAwM2VnOF9oZSA6IHdyLVx1MDAzZWc4O1xuK1x0Y2FzZSBNVDc5MjVfQldfMTYwOlxuK1x0XHRyZXR1cm4gaGUgPyB3ci1cdTAwM2VnMTZfaGUgOiB3ci1cdTAwM2VnMTY7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbit9XG4rXG4rLyogQ29kaW5nIHVzZWQgZm9yIHRoZSBhdXRvLXJhdGUgZW50cmllcywgbWlycm9yIEdlbjRtXG4rICogY29ubmFjM3hfd3RibF9nZXRfbGRwY19pbmZvX2Zyb21fZncoKTogMCA9IEJDQywgMSA9IExEUEMuXG4rICovXG4rdThcbittdDc5MjVfd3RibF9nZXRfbGRwYyhjb25zdCBzdHJ1Y3QgbXQ3OTI1X3d0YmxfcmF0ZSAqd3IsIHU4IHR4bW9kZSlcbit7XG4rXHRzd2l0Y2ggKHR4bW9kZSkge1xuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYOlxuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hUR0Y6XG4rXHRcdHJldHVybiB3ci1cdTAwM2VodF9sZHBjO1xuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVDpcbitcdFx0cmV0dXJuIHdyLVx1MDAzZXZodF9sZHBjO1xuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVOlxuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX0VSOlxuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1RSSUc6XG4rXHRjYXNlIE1UNzkyNV9UWF9SQVRFX01PREVfSEVfTVU6XG4rXHRcdHJldHVybiB3ci1cdTAwM2VoZV9sZHBjO1xuK1x0Y2FzZSBNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUjpcbitcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfVFJJRzpcbitcdGNhc2UgTVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVU6XG4rXHRcdHJldHVybiB3ci1cdTAwM2VlaHRfbGRwYztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxuK1x0XHRcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cylcbit7XG4rXHR1MTYgbGVuID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKmV2ZW50ID0gTlVMTDtcbitcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfcmVxIHJlcSA9IHtcbitcdFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19TVEEpLFxuK1x0XHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxuK1x0XHQubGxzX3JlYWRfY2xlYXIgPSBmYWxzZSxcbitcdFx0LnJlc2V0X2NvdW50ZXIgPSBmYWxzZSxcbitcdH07XG4rXG4rXHRyZXQgPSBtdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4KGRldiwgXHUwMDI2cmVxLnN0YV9yZWNfaWR4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIXN0YXRzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG4rXHRcdFx0XHRcdE1DVV9VTklfUVVFUlkoR0VUX1NUQVRfSU5GTyksXG4rXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZXZlbnQgPSAoc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfZXZlbnQgKilza2ItXHUwMDNlZGF0YTtcbitcbitcdGlmIChsZTE2X3RvX2NwdShldmVudC1cdTAwM2V0YWcpICE9IFVOSV9DTURfSURfU1RBVElTVElDU19TVEEpIHtcbitcdFx0cmV0ID0gLUVQUk9UTztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRsZW4gPSBsZTE2X3RvX2NwdShldmVudC1cdTAwM2VsZW4pO1xuK1x0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKCpldmVudCkgLSBzaXplb2YoZXZlbnQtXHUwMDNlcnN2KSB8fFxuK1x0ICAgIGxlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIHNpemVvZihldmVudC1cdTAwM2Vyc3YpIHx8ICFJU19BTElHTkVEKGxlbiwgNCkpIHtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChldmVudC1cdTAwM2VzdGF0cy52ZXJzaW9uICE9IE1UNzkyNV9TVEFfU1RBVFNfVkVSU0lPTikge1xuK1x0XHRyZXQgPSAtRVBST1RPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICghKGxlMzJfdG9fY3B1KGV2ZW50LVx1MDAzZXN0YXRzLmZsYWdzKSBcdTAwMjYgTVQ3OTI1X1NUQV9TVEFUU19WQUxJRCkpIHtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRtZW1jcHkoc3RhdHMsIFx1MDAyNmV2ZW50LVx1MDAzZXN0YXRzLCBzaXplb2YoKnN0YXRzKSk7XG4rXG4rb3V0OlxuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGJhbmRfaWR4LFxuK1x0XHRcdCAgICBjb25zdCB1MzIgKmNvdW50ZXJzLCB1OCBjb3VudGVyX251bSxcbitcdFx0XHQgICAgdTY0ICp2YWx1ZXMpXG4re1xuK1x0dTggKnJlcTtcbitcdHU4ICp0bHYsICp0bHZfZW5kO1xuK1x0dTE2IHJlcV9sZW47XG4rXHRpbnQgaSwgcmV0O1xuK1x0c3RydWN0IG10NzkyNV9taWJfaGRyICpyZXFfaGRyO1xuK1x0c3RydWN0IG10NzkyNV9taWJfZGF0YSAqcmVxX3RsdjtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRpZiAoIWNvdW50ZXJzIHx8ICF2YWx1ZXMgfHwgIWNvdW50ZXJfbnVtIHx8XG4rXHQgICAgY291bnRlcl9udW0gXHUwMDNlIE1UNzkyNV9NSUJfTUFYX0NOVClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBjbGVhciBvdXRwdXQ7IGNvdW50ZXJzIG5vdCByZXR1cm5lZCBieSBmaXJtd2FyZSBzdGF5IDAgKi9cbitcdG1lbXNldCh2YWx1ZXMsIDAsIGNvdW50ZXJfbnVtICogc2l6ZW9mKCp2YWx1ZXMpKTtcbitcbitcdHJlcV9sZW4gPSBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSArXG4rXHRcdCAgY291bnRlcl9udW0gKiBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSk7XG4rXG4rXHRyZXEgPSBremFsbG9jKHJlcV9sZW4sIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyZXEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmVxX2hkciA9IChzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIgKilyZXE7XG4rXHRyZXFfaGRyLVx1MDAzZWJhbmRfaWR4ID0gYmFuZF9pZHg7XG4rXG4rXHRyZXFfdGx2ID0gKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKikocmVxICsgc2l6ZW9mKCpyZXFfaGRyKSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudGVyX251bTsgaSsrKSB7XG4rXHRcdHJlcV90bHZbaV0udGFnID0gY3B1X3RvX2xlMTYoVU5JX0NNRF9NSUJfREFUQSk7XG4rXHRcdHJlcV90bHZbaV0ubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpKTtcbitcdFx0cmVxX3RsdltpXS5jb3VudGVyID0gY3B1X3RvX2xlMzIoY291bnRlcnNbaV0pO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbitcdFx0XHRcdFx0TUNVX1VOSV9RVUVSWShHRVRfTUlCX0lORk8pLCByZXEsXG4rXHRcdFx0XHRcdHJlcV9sZW4sIHRydWUsIFx1MDAyNnNrYik7XG4rXHRrZnJlZShyZXEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfaGRyKSkge1xuK1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0Lyogd2FsayB0aGUgcmV0dXJuZWQgVExWcywgbWF0Y2ggZWFjaCBjb3VudGVyIElEIHRvIHRoZSByZXF1ZXN0ICovXG4rXHR0bHYgPSBza2ItXHUwMDNlZGF0YSArIHNpemVvZihzdHJ1Y3QgbXQ3OTI1X21pYl9oZHIpO1xuK1x0dGx2X2VuZCA9IHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWxlbjtcbitcbitcdHdoaWxlICh0bHYgKyBzaXplb2Yoc3RydWN0IG10NzkyNV9taWJfZGF0YSkgXHUwMDNjPSB0bHZfZW5kKSB7XG4rXHRcdHN0cnVjdCBtdDc5MjVfbWliX2RhdGEgKmV2dF90bHYgPVxuK1x0XHRcdChzdHJ1Y3QgbXQ3OTI1X21pYl9kYXRhICopdGx2O1xuK1x0XHR1MTYgdGFnID0gbGUxNl90b19jcHUoZXZ0X3Rsdi1cdTAwM2V0YWcpO1xuK1x0XHR1MTYgbGVuID0gbGUxNl90b19jcHUoZXZ0X3Rsdi1cdTAwM2VsZW4pO1xuK1x0XHR1MzIgY291bnRlcjtcbitcbitcdFx0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdDc5MjVfbWliX2RhdGEpIHx8XG4rXHRcdCAgICB0bHYgKyBsZW4gXHUwMDNlIHRsdl9lbmQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmICh0YWcgPT0gVU5JX0NNRF9NSUJfREFUQSkge1xuK1x0XHRcdGNvdW50ZXIgPSBsZTMyX3RvX2NwdShldnRfdGx2LVx1MDAzZWNvdW50ZXIpO1xuK1xuK1x0XHRcdGlmIChjb3VudGVyIFx1MDAzYyBNVDc5MjVfTUlCX0NOVF9NQVhfTlVNKSB7XG4rXHRcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudGVyX251bTsgaSsrKSB7XG4rXHRcdFx0XHRcdGlmIChjb3VudGVyc1tpXSA9PSBjb3VudGVyKSB7XG4rXHRcdFx0XHRcdFx0dmFsdWVzW2ldID1cbitcdFx0XHRcdFx0XHQgIGxlNjRfdG9fY3B1KGV2dF90bHYtXHUwMDNlZGF0YSk7XG4rXHRcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHRcdH1cbitcdFx0XHRcdH1cbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0dGx2ICs9IGxlbjtcbitcdH1cbitcbitcdHJldCA9IDA7XG4rXG4rb3V0OlxuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rY2hhciAqbXQ3OTI1X2h3X3JhdGVfb2ZkbV9zdHIodTggb2ZkbV9pZHgpXG4re1xuK1x0Y2hhciAqIGNvbnN0IG9mZG1fc3RyW10gPSB7XG4rXHRcdFwiNk1cIiwgXCI5TVwiLCBcIjEyTVwiLCBcIjE4TVwiLCBcIjI0TVwiLCBcIjM2TVwiLCBcIjQ4TVwiLCBcIjU0TVwiLCBcIk4vQVwiXG4rXHR9O1xuK1xuK1x0c3dpdGNoIChvZmRtX2lkeCkge1xuK1x0Y2FzZSAxMTogcmV0dXJuIG9mZG1fc3RyWzBdO1x0LyogNk0gKi9cbitcdGNhc2UgMTU6IHJldHVybiBvZmRtX3N0clsxXTtcdC8qIDlNICovXG4rXHRjYXNlIDEwOiByZXR1cm4gb2ZkbV9zdHJbMl07XHQvKiAxMk0gKi9cbitcdGNhc2UgMTQ6IHJldHVybiBvZmRtX3N0clszXTtcdC8qIDE4TSAqL1xuK1x0Y2FzZSA5OiAgcmV0dXJuIG9mZG1fc3RyWzRdO1x0LyogMjRNICovXG4rXHRjYXNlIDEzOiByZXR1cm4gb2ZkbV9zdHJbNV07XHQvKiAzNk0gKi9cbitcdGNhc2UgODogIHJldHVybiBvZmRtX3N0cls2XTtcdC8qIDQ4TSAqL1xuK1x0Y2FzZSAxMjogcmV0dXJuIG9mZG1fc3RyWzddO1x0LyogNTRNICovXG4rXHRkZWZhdWx0OiByZXR1cm4gb2ZkbV9zdHJbOF07XG4rXHR9XG4rfVxuK1xuKy8qIG10NzkyeF9tY3VfZ2V0X3d0YmxfcmF0ZSAtIGZldGNoIHRoZSBmaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgZm9yIGEgV0NJRFxuKyAqIEBkZXY6XHRkZXZpY2VcbisgKiBAd2xhbl9pZHg6XHRIVyBXVEJMIC8gV0NJRCBpbmRleCAoc2VlIG10NzkyNV9zdGFfc3RhdHMud3RibF9pZHgpXG4rICogQHJhdGU6XHRvdXQsIGZpbGxlZCB3aXRoIHRoZSBhdXRvLXJhdGUgdGFibGUgc25hcHNob3RcbisgKlxuKyAqIE1pcnJvciBvZiBHZW40bSB3bGFub2lkR2V0U3RhdFd0YmwoKTogc2VuZCBVTklfQ01EX0dFVF9TVEFUX0lORk8gd2l0aCB0aGVcbisgKiBXVEJMIHJhdGUgVExWIChjbWQgdGFnIDEwKSBhbmQgcGFyc2UgdGhlIHJlcGx5IChldmVudCB0YWcgMTIpIGludG8gQHJhdGUuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLlxuKyAqL1xuK2ludCBtdDc5MnhfbWN1X2dldF93dGJsX3JhdGUoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTE2IHdsYW5faWR4LFxuK1x0XHRcdCAgICAgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKnJhdGUpXG4re1xuK1x0aW50IHJldDtcbitcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICpldmVudCA9IE5VTEw7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX3JlcSByZXEgPSB7XG4rXHRcdC50YWcgPSBjcHVfdG9fbGUxNihVTklfQ01EX0lEX1NUQVRJU1RJQ1NfV1RCTCksXG4rXHRcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIHNpemVvZihyZXEucnN2KSksXG4rXHRcdC53bGFuX2lkeCA9IGNwdV90b19sZTE2KHdsYW5faWR4KSxcbitcdH07XG4rXG4rXHRpZiAoIXJhdGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbitcdFx0XHRcdFx0TUNVX1VOSV9RVUVSWShHRVRfU1RBVF9JTkZPKSxcbitcdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpldmVudCkpIHtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGV2ZW50ID0gKHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlX2V2ZW50ICopc2tiLVx1MDAzZWRhdGE7XG4rXG4rXHRpZiAobGUxNl90b19jcHUoZXZlbnQtXHUwMDNlcmF0ZS50YWcpICE9IE1UNzkyNV9VTklfRVZFTlRfU1RBVElTVElDU19XVEJMKSB7XG4rXHRcdHJldCA9IC1FUFJPVE87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bWVtY3B5KHJhdGUsIFx1MDAyNmV2ZW50LVx1MDAzZXJhdGUsIHNpemVvZigqcmF0ZSkpO1xuK1x0cmV0ID0gMDtcbitcbitvdXQ6XG4rXHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkgLSBxdWVyeSBSU1NJIGFuZCBUWCBsaW5rIHNwZWVkIGZvciBhIGJhbmRcbisgKiBAZGV2Olx0ZGV2aWNlXG4rICogQGJhbmRfaWR4Olx0YmFuZC9CU1MgaW5kZXggKDAuLjMpXG4rICogQHJzc2k6XHRvdXQsIG1vdmluZy1hdmVyYWdlIGJlYWNvbiBSU1NJIGluIGRCbSAobWF5IGJlIE5VTEwpXG4rICogQHR4X2xpbmtfc3BlZWRfa2Jwczogb3V0LCBUWCByYXRlIGluIGtiaXQvcyAobWF5IGJlIE5VTEwpXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgYmFuZCdzIGxpbmsgcXVhbGl0eSBpcyBub3QgcmVhZHkuXG4rICpcbisgKiBPbmx5IFJTU0kgYW5kIFRYIHJhdGUgY29tZSBmcm9tIGZpcm13YXJlIGhlcmU7IGZvciBSWCByYXRlIHJlYWQgd2NpZC1cdTAwM2VyYXRlLlxuKyAqL1xuK2ludCBtdDc5MjVfbWN1X2dldF9saW5rX3F1YWxpdHkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsXG4rXHRcdFx0XHRzOCAqcnNzaSwgdTMyICp0eF9saW5rX3NwZWVkX2ticHMpXG4re1xuK1x0aW50IHJldDtcbitcdHN0cnVjdCBtdDc5MjVfbHFfZXZlbnQgKmV2ZW50O1xuK1x0c3RydWN0IG10NzkyNV9saW5rX3F1YWxpdHkgKmxxO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHN0cnVjdCBtdDc5MjVfbHFfcmVxIHJlcSA9IHtcbitcdFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DTURfSURfU1RBVElTVElDU19MSU5LX1FVQUxJVFkpLFxuK1x0XHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSBzaXplb2YocmVxLnJzdikpLFxuK1x0fTtcbitcbitcdGlmIChiYW5kX2lkeCBcdTAwM2U9IE1UNzkyNV9MUV9CQU5EX05VTSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuK1x0XHRcdFx0XHRNQ1VfVU5JX1FVRVJZKEdFVF9TVEFUX0lORk8pLCBcdTAwMjZyZXEsXG4rXHRcdFx0XHRcdHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKmV2ZW50KSkge1xuK1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0ZXZlbnQgPSAoc3RydWN0IG10NzkyNV9scV9ldmVudCAqKXNrYi1cdTAwM2VkYXRhO1xuK1xuK1x0aWYgKGxlMTZfdG9fY3B1KGV2ZW50LVx1MDAzZXRhZykgIT0gVU5JX0NNRF9JRF9TVEFUSVNUSUNTX0xJTktfUVVBTElUWSkge1xuK1x0XHRyZXQgPSAtRVBST1RPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGxxID0gXHUwMDI2ZXZlbnQtXHUwMDNlbHFbYmFuZF9pZHhdO1xuK1x0aWYgKCFscS1cdTAwM2Vpc19yZWFkeSkge1xuK1x0XHRyZXQgPSAtRU5PRU5UO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChyc3NpKVxuK1x0XHQqcnNzaSA9IGxxLVx1MDAzZXJzc2k7XG4rXG4rXHQvKiBmaXJtd2FyZSByZXBvcnRzIFRYIHJhdGUgaW4gNTAwIEtiL3MgdW5pdHMgLVx1MDAzZSBrYml0L3MgKi9cbitcdGlmICh0eF9saW5rX3NwZWVkX2ticHMpXG4rXHRcdCp0eF9saW5rX3NwZWVkX2ticHMgPSBsZTE2X3RvX2NwdShscS1cdTAwM2VsaW5rX3NwZWVkKSAqIDUwMDtcbitcbitcdHJldCA9IDA7XG4rXG4rb3V0OlxuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvc3RhdHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3N0YXRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hNzBiOWViM2FhODA2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9zdGF0cy5oXG5AQCAtMCwwICsxLDMwOSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi9cbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYgTWVkaWFUZWsgSW5jLiAqL1xuK1xuKyNpZm5kZWYgX19NVDc5MjVfU1RBVFNfSFxuKyNkZWZpbmUgX19NVDc5MjVfU1RBVFNfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXCIuLi9tdDc2X2Nvbm5hY19tY3UuaFwiXG4rXG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0FDX05VTSA0XG4rI2RlZmluZSBNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNIDJcbisjZGVmaW5lIE1UNzkyNV9TVEFfU1RBVFNfQUdHX1JBTkdFX05VTSAxNlxuKyNkZWZpbmUgTVQ3OTI1X1NUQV9TVEFUU19UWF9RVUFMSVRZX05VTSA0XG4rI2RlZmluZSBNVDc5MjVfVFhfTU9ERV9OVU0gICAgICAxNlxuKyNkZWZpbmUgTVQ3OTI1X1RYX1JBVEVfQ0NLX05VTSAgNVxuKyNkZWZpbmUgTVQ3OTI1X1RYX1JBVEVfQldfTlVNICAgNlxuK1xuKy8qIEhXIHJhdGUgY29kZSAoMTYtYml0KSBmaWVsZCBleHRyYWN0LCBtaXJyb3IgR2VuNG0gQ09OTkFDM1hfSFdfVFhfUkFURV9UT18qLlxuKyAqIFRoZSBhdXRvLXJhdGUgdGFibGUgc3RvcmVzIG9uZSByYXRlIGNvZGUgcGVyIGVudHJ5LlxuKyAqL1xuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fTUNTKF94KVx0KCgoX3gpIFx1MDAyNiBHRU5NQVNLKDUsIDApKSBcdTAwM2VcdTAwM2UgMClcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX01PREUoX3gpXHQoKChfeCkgXHUwMDI2IEdFTk1BU0soOSwgNikpIFx1MDAzZVx1MDAzZSA2KVxuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVE9fTlNTKF94KVx0KCgoX3gpIFx1MDAyNiBHRU5NQVNLKDEzLCAxMCkpIFx1MDAzZVx1MDAzZSAxMClcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX1NUQkMoX3gpXHQoKChfeCkgXHUwMDI2IEJJVCgxNCkpIFx1MDAzZVx1MDAzZSAxNClcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPX0RDTShfeClcdCgoKF94KSBcdTAwMjYgQklUKDQpKSBcdTAwM2VcdTAwM2UgNClcbisjZGVmaW5lIE1UNzkyNV9IV19SQVRFX1RPXzEwNlQoX3gpXHQoKChfeCkgXHUwMDI2IEJJVCg1KSkgXHUwMDNlXHUwMDNlIDUpXG4rI2RlZmluZSBNVDc5MjVfSFdfUkFURV9VTk1BU0tfRENNKF9yKVx0KCh1OCkoX3IpIFx1MDAyNiAweGVmKVxuKyNkZWZpbmUgTVQ3OTI1X0hXX1JBVEVfVU5NQVNLXzEwNlQoX3IpXHQoKHU4KShfcikgXHUwMDI2IDB4ZGYpXG4rXG4rLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGZpcm13YXJlIGF1dG8tcmF0ZSB0YWJsZSAobWlycm9yIEdlbjRtXG4rICogQVVUT19SQVRFX05VTSkuIFJBIGN5Y2xlcyB0aHJvdWdoIHRoZXNlIGFuZCByZXBvcnRzIHdoaWNoIG9uZSBpcyBpbiB1c2VcbisgKiB2aWEgd3RibC1cdTAwM2VyYXRlX2lkeC5cbisgKi9cbisjZGVmaW5lIE1UNzkyNV9BVVRPX1JBVEVfTlVNIDhcbitcbisvKiBGaXJtd2FyZSBFVkVOVF9TVEFUSVNUSUNTIHN1Yi1ldmVudCB0YWdzLiBUaGUgV1RCTCByYXRlIHJlcXVlc3QgdXNlcyBjbWQgdGFnXG4rICogVU5JX0NNRF9JRF9TVEFUSVNUSUNTX1dUQkwgKDEwKSBidXQgdGhlIGZpcm13YXJlIHJlcGxpZXMgd2l0aCBldmVudCB0YWcgMTIuXG4rICovXG4rI2RlZmluZSBNVDc5MjVfVU5JX0VWRU5UX1NUQVRJU1RJQ1NfV1RCTCAxMlxuK1xuKy8qIENPTk5BQzNYIFRYIFZlY3RvciBCQlAgbGF0Y2ggYml0IGZpZWxkcyAobWlycm9yIGNtbV9hc2ljX2Nvbm5hYzN4LmgpLlxuKyAqIFRoZXNlIG9wZXJhdGUgb24gdGhlIDMtRFdPUkQgdHhfdmVjdG9yW2JhbmRdLnR4dlszXSBhcnJheS5cbisgKi9cbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1JBVEUoX3R4dilcdCgoX3R4dilbMl0gXHUwMDI2IDB4N2YpXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9MRFBDKF90eHYpXHQoKChfdHh2KVsyXSBcdTAwMjYgKDB4MSBcdTAwM2NcdTAwM2MgNykpIFx1MDAzZVx1MDAzZSA3KVxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfU1RCQyhfdHh2KVx0KCgoX3R4dilbMF0gXHUwMDI2ICgweDMgXHUwMDNjXHUwMDNjIDYpKSBcdTAwM2VcdTAwM2UgNilcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX0ZSTU9ERShfdHh2KVx0KCgoX3R4dilbMF0gXHUwMDI2ICgweDcgXHUwMDNjXHUwMDNjIDgpKSBcdTAwM2VcdTAwM2UgOClcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX01PREUoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHhmIFx1MDAzY1x1MDAzYyAxMikpIFx1MDAzZVx1MDAzZSAxMilcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX05TVFMoX3R4dilcdCgoKF90eHYpWzJdIFx1MDAyNiAoMHhmVSBcdTAwM2NcdTAwM2MgMjgpKSBcdTAwM2VcdTAwM2UgMjgpXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9QV1IoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHhmZiBcdTAwM2NcdTAwM2MgMTYpKSBcdTAwM2VcdTAwM2UgMTYpXG4rI2RlZmluZSBNVDc5MjVfVFhWX0dFVF9UWF9TR0koX3R4dilcdCgoKF90eHYpWzFdIFx1MDAyNiAoMHgzIFx1MDAzY1x1MDAzYyAyNikpIFx1MDAzZVx1MDAzZSAyNilcbisjZGVmaW5lIE1UNzkyNV9UWFZfR0VUX1RYX1NQRV9JRFgoX3R4dilcdCgoKF90eHYpWzBdIFx1MDAyNiAoMHgxZiBcdTAwM2NcdTAwM2MgMCkpIFx1MDAzZVx1MDAzZSAwKVxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfRENNKF90eHYpXHQoKChfdHh2KVsyXSBcdTAwMjYgKDB4MSBcdTAwM2NcdTAwM2MgNCkpIFx1MDAzZVx1MDAzZSA0KVxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9HRVRfVFhfMTA2VChfdHh2KVx0KCgoX3R4dilbMl0gXHUwMDI2ICgweDEgXHUwMDNjXHUwMDNjIDUpKSBcdTAwM2VcdTAwM2UgNSlcbisjZGVmaW5lIE1UNzkyNV9UWFZfUkFURV9VTk1BU0tfRENNKF9yKVx0KCh1OCkoX3IpIFx1MDAyNiAweGVmKVxuKyNkZWZpbmUgTVQ3OTI1X1RYVl9SQVRFX1VOTUFTS18xMDZUKF9yKVx0KCh1OCkoX3IpIFx1MDAyNiAweGRmKVxuK1xuK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X21vZGVfc3RyW01UNzkyNV9UWF9NT0RFX05VTV07XG4rZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtdDc5MjVfdHhfcmF0ZV9jY2tfc3RyW01UNzkyNV9UWF9SQVRFX0NDS19OVU1dO1xuK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbXQ3OTI1X3R4X3JhdGVfYndfc3RyW01UNzkyNV9UWF9SQVRFX0JXX05VTV07XG4rXG4rLyogVFggcmF0ZSBtb2RlLCBtaXJyb3IgR2VuNG0gVFhfUkFURV9NT0RFXyogKHNlZSBuaWNfcmF0ZS5oKS4gVXNlZCB0byBkZWNvZGVcbisgKiBib3RoIHRoZSBUWCBWZWN0b3IgQkJQIGxhdGNoIGFuZCB0aGUgZmlybXdhcmUgYXV0by1yYXRlIHRhYmxlIHJhdGUgY29kZXMuXG4rICovXG4rZW51bSBtdDc5MjVfdHhfcmF0ZV9tb2RlIHtcbitcdE1UNzkyNV9UWF9SQVRFX01PREVfQ0NLID0gMCxcbitcdE1UNzkyNV9UWF9SQVRFX01PREVfT0ZETSA9IDEsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hUTUlYID0gMixcbitcdE1UNzkyNV9UWF9SQVRFX01PREVfSFRHRiA9IDMsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX1ZIVCA9IDQsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX1BMUiA9IDUsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hFX1NVID0gOCxcbitcdE1UNzkyNV9UWF9SQVRFX01PREVfSEVfRVIgPSA5LFxuK1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9IRV9UUklHID0gMTAsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX0hFX01VID0gMTEsXG4rXHRNVDc5MjVfVFhfUkFURV9NT0RFX0VIVF9FUiA9IDEzLFxuK1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfVFJJRyA9IDE0LFxuK1x0TVQ3OTI1X1RYX1JBVEVfTU9ERV9FSFRfTVUgPSAxNSxcbit9O1xuK1xuK2VudW0ge1xuK1x0VU5JX0NNRF9NSUJfREFUQSxcbit9O1xuK1xuK2VudW0gc3RhdHNfcXVlcnlfbWliX2FycmF5X2luZGV4IHtcbitcdFFVRVJZX01JQl9DTlRfUlhfRkNTX0VSUiA9IDAsXG4rXHRRVUVSWV9NSUJfQ05UX1JYX0ZJRk9fT1ZFUkZMT1csXG4rXHRRVUVSWV9NSUJfQ05UX1JYX01QRFUsXG4rXHRRVUVSWV9NSUJfQ05UX0FNUERVX1JYX0NPVU5ULFxuK1x0UVVFUllfTUlCX0NOVF9QRl9EUk9QLFxuK1x0UVVFUllfTUlCX0NOVF9MRU5fTUlTTUFUQ0gsXG4rXHRRVUVSWV9NSUJfQ05UX0NIQU5ORUxfSURMRSxcbitcdFFVRVJZX01JQl9DTlRfQ0NBX05BVl9UWF9USU1FLFxuK1x0UVVFUllfTUlCX0NOVF9NRFJEWSxcbitcdFFVRVJZX01JQl9DTlRfUlhfQ0NLX01EUkRZX1RJTUUsXG4rXHRRVUVSWV9NSUJfQ05UX1JYX09GRE1fTEdfTUlYRURfTURSRFlfVElNRSxcbitcdFFVRVJZX01JQl9DTlRfUlhfT0ZETV9HUkVFTl9NRFJEWV9USU1FLFxuK1x0UVVFUllfTUlCX0NOVF9QX0NDQV9USU1FLFxuK1x0UVVFUllfTUlCX0NOVF9TX0NDQV9USU1FLFxuK1x0UVVFUllfTUlCX0NOVF9QX0VEX1RJTUUsXG4rXHRRVUVSWV9NSUJfQ05UX0JDTl9UWCxcbitcdFFVRVJZX01JQl9DTlRfVFhfQldfNDBNSFosXG4rXHRRVUVSWV9NSUJfQ05UX1RYX0JXXzgwTUhaLFxuK1x0UVVFUllfTUlCX0NOVF9UWF9CV18xNjBNSFosXG4rXHRRVUVSWV9NSUJfQ05UX0JTUzBfQkFfTUlTUyxcbitcdFFVRVJZX01JQl9DTlRfQlNTMF9SVFNfVFhfQ05ULFxuK1x0UVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZLFxuK1x0UVVFUllfTUlCX0NOVF9CU1MwX0ZSQU1FX1JFVFJZXzIsXG4rXHRRVUVSWV9NSUJfQ05UX0JTUzBfUlRTX1JFVFJZLFxuK1x0UVVFUllfTUlCX0NOVF9CU1MwX0FDS19GQUlMLFxuK1x0UVVFUllfTUlCX0NOVF9BTVBEVSxcbitcdFFVRVJZX01JQl9DTlRfQU1QRFVfTVBEVSxcbitcdFFVRVJZX01JQl9DTlRfQU1QRFVfQUNLRUQsXG4rXHRRVUVSWV9NSUJfQ05UX01BWF9OVU0sXG4rfTtcbitcbitlbnVtIHN0YXRzX3RyeF9hZ2dfcmFuZ2Uge1xuK1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UwX0lEWCxcbitcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFMV9JRFgsXG4rXHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTJfSURYLFxuK1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0UzX0lEWCxcbitcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFNF9JRFgsXG4rXHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRTVfSURYLFxuK1x0U1RBVF9NSUJfQ05UX1RSWF9BR0dfUkFOR0U2X0lEWCxcbitcdFNUQVRfTUlCX0NOVF9UUlhfQUdHX1JBTkdFN19JRFgsXG4rXHRTVEFUX01JQl9DTlRfVFJYX0FHR19SQU5HRV9NQVhfTlVNXG4rfTtcbitcbitlbnVtIHtcbitcdE1UNzkyNV9CV18yMCA9IDAsXG4rXHRNVDc5MjVfQldfNDAsXG4rXHRNVDc5MjVfQldfODAsXG4rXHRNVDc5MjVfQldfMTYwLFxuK307XG4rXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHNfYWMge1xuK1x0X19sZTMyIHR4X2ZhaWw7XG4rXHRfX2xlMzIgdHhfcmV0cnk7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c190eF92ZWN0b3Ige1xuK1x0X19sZTMyIHR4dlszXTtcbit9IF9fcGFja2VkO1xuK1xuK3N0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX21pYiB7XG4rXHRfX2xlMzIgcnhfbXBkdV9jbnQ7XG4rXHRfX2xlMzIgZmNzX2Vycm9yO1xuK1x0X19sZTMyIHJ4X2ZpZm9fZnVsbDtcbitcdF9fbGUzMiBhbXBkdV90eF9zZl9jbnQ7XG4rXHRfX2xlMzIgYW1wZHVfdHhfYWNrX3NmX2NudDtcbitcdF9fbGUzMiB0eF9yYW5nZV9hbXBkdV9jbnRbTVQ3OTI1X1NUQV9TVEFUU19BR0dfUkFOR0VfTlVNXTtcbit9IF9fcGFja2VkO1xuK1xuKy8qIEZpcm13YXJlIEVWRU5UX1NUQV9TVEFUSVNUSUNTIGJvZHkuICovXG4rc3RydWN0IG10NzkyNV9zdGFfc3RhdHMge1xuK1x0dTggdmVyc2lvbjtcbitcdHU4IHJzdlszXTtcbitcdF9fbGUzMiBmbGFncztcbitcbitcdHU4IHN0YV9pZHg7XG4rXHR1OCBic3NfaWR4O1xuK1x0dTggd3RibF9pZHg7XG4rXHR1OCByc3YxO1xuK1xuK1x0dTggbWFjX2FkZHJbRVRIX0FMRU5dO1xuK1x0dTggcGVyO1xuK1x0dTggcmNwaTtcbitcbitcdF9fbGUzMiBwaHlfbW9kZTtcbitcdF9fbGUxNiBsaW5rX3NwZWVkOyAvKiAwLjUgTWJpdC9zIHVuaXRzICovXG4rXHR1OCBsaW5rX3F1YWxpdHk7XG4rXHR1OCBsaW5rX3Jlc2VydmVkO1xuK1xuK1x0X19sZTMyIHR4X2NvdW50O1xuK1x0X19sZTMyIHR4X2ZhaWxfY291bnQ7XG4rXHRfX2xlMzIgdHhfbGlmZV90aW1lb3V0X2NvdW50O1xuK1x0X19sZTMyIHR4X2RvbmVfYWlyX3RpbWU7XG4rXHRfX2xlMzIgdHJhbnNtaXRfY291bnQ7XG4rXHRfX2xlMzIgdHJhbnNtaXRfZmFpbF9jb3VudDtcbitcbitcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzX2FjIGFjW01UNzkyNV9TVEFfU1RBVFNfQUNfTlVNXTtcbitcbitcdHU4IHRlbXBlcmF0dXJlO1xuK1x0dTggc2tpcF9hcjtcbitcdHU4IGFyX3RhYmxlX2lkeDtcbitcdHU4IHJhdGVfZW50cnlfaWR4O1xuK1x0dTggcmF0ZV9lbnRyeV9pZHhfcHJldjtcbitcdHU4IHR4X3NnaV9kZXRlY3RfcGFzc19jbnQ7XG4rXHR1OCBhdmVfcGVyO1xuK1x0dTggcnN2MjtcbitcbitcdF9fbGUzMiBhZ2dfcmFuZ2VfY3RybFsyXTtcbitcdHU4IHJhbmdlX21vZGU7XG4rXHR1OCByc3YzWzNdO1xuK1x0X19sZTMyIGFnZ19yYW5nZV9jdHJsX2V4dFs2XTtcbitcbitcdHU4IGFyX3N0YXRlX2N1cnI7XG4rXHR1OCBhcl9zdGF0ZV9wcmV2O1xuK1x0dTggYXJfYWN0aW9uX3R5cGU7XG4rXHR1OCBoaWdoZXN0X3JhdGVfY250O1xuK1x0dTggbG93ZXN0X3JhdGVfY250O1xuK1x0dTggcnN2NDtcbitcdF9fbGUxNiB0cmFpbl91cDtcbitcdF9fbGUxNiB0cmFpbl9kb3duO1xuK1x0dTggcnN2NVsyXTtcbitcdF9fbGUzMiByYXRlMV90eF9jbnQ7XG4rXHRfX2xlMzIgcmF0ZTFfZmFpbF9jbnQ7XG4rXG4rXHRzdHJ1Y3QgbXQ3OTI1X3N0YV9zdGF0c190eF92ZWN0b3IgdHhfdmVjdG9yW01UNzkyNV9TVEFfU1RBVFNfQkFORF9OVU1dO1xuK1x0c3RydWN0IG10NzkyNV9zdGFfc3RhdHNfbWliIG1pYltNVDc5MjVfU1RBX1NUQVRTX0JBTkRfTlVNXTtcbitcbitcdHU4IGlzX2ZvcmNlX3R4X3N0cmVhbTtcbitcdHU4IGlzX2ZvcmNlX3NlX29mZjtcbitcdF9fbGUxNiByYV9ydW5uaW5nX2NudDtcbitcdHU4IHJhX3N0YXR1cztcbitcdHU4IG1heF9hbXBkdV9mYWN0b3I7XG4rXHR1OCB0eF9xdWFsaXR5W01UNzkyNV9TVEFfU1RBVFNfVFhfUVVBTElUWV9OVU1dO1xuK1x0dTggdHhfcmF0ZV91cF9wZW5hbHR5O1xuK1x0dTggbG93X3RyYWZmaWNfbW9kZTtcbitcdHU4IGxvd190cmFmZmljX2NvdW50O1xuK1x0dTggbG93X3RyYWZmaWNfZGFzaGJvYXJkO1xuK1x0dTggZHluYW1pY19zZ2lfc3RhdGU7XG4rXHR1OCBkeW5hbWljX3NnaV9zY29yZTtcbitcdHU4IGR5bmFtaWNfYndfc3RhdGU7XG4rXHR1OCBkeW5hbWljX2diYW5kXzI1NnFhbV9zdGF0ZTtcbitcdHU4IHZodF9ub25fc3BfcmF0ZV9zdGF0ZTtcbitcdHU4IHJzdjZbM107XG4rXHR1OCByc3Y3WzJdO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RydWN0IG10NzkyNV9zdGFfcmVjX2xvb2t1cCB7XG4rXHRpbnQgc3RhX3JlY19pZHg7XG4rfTtcbitcbisvKiBGaXJtd2FyZSBhdXRvLXJhdGUgdGFibGUgc25hcHNob3QsIG1pcnJvciBHZW40bSBzdHJ1Y3QgVU5JX0VWRU5UX1NUQVRfV1RCTC5cbisgKlxuKyAqIFRoZSBmaXJtd2FyZSBSQSBtYWludGFpbnMgdXAgdG8gTVQ3OTI1X0FVVE9fUkFURV9OVU0gY2FuZGlkYXRlIHJhdGVzIGluXG4rICogcmF0ZV9jb2RlW10uIHJhdGVfaWR4IHRlbGxzIHdoaWNoIGVudHJ5IGlzIGN1cnJlbnRseSBpbiB1c2UsIHNvIGEgZHVtcCBjYW5cbisgKiBwb2ludCBhdCBpdCB3aXRoIFwiLS1cdTAwM2VcIi4gZmNhcCBpcyB0aGUgYmFuZHdpZHRoIGNhcGFiaWxpdHkgYW5kIHRoZSBsZHBjL3NnaVxuKyAqIGZsYWdzIGRlc2NyaWJlIHRoZSBwZXItbW9kZSBjb2RpbmcvZ3VhcmQtaW50ZXJ2YWwgdXNlZCBmb3IgdGhvc2UgcmF0ZXMuXG4rICovXG4rc3RydWN0IG10NzkyNV93dGJsX3JhdGUge1xuK1x0X19sZTE2IHRhZztcbitcdF9fbGUxNiBsZW47XG4rXHR1OCByeF9yY3BpMDtcbitcdHU4IHJ4X3JjcGkxO1xuK1x0dTggY2JybjtcbitcdHU4IGZjYXA7XG4rXHR1OCBzcGVfaWR4O1xuK1x0dTggZzI7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlcyMCAqL1xuK1x0dTggZzQ7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlc0MCAqL1xuK1x0dTggZzg7XHRcdFx0LyogU0dJIGVuYWJsZWQsIG5vbi1IRSwgQlc4MCAqL1xuK1x0dTggZzE2O1x0XHRcdC8qIFNHSSBlbmFibGVkLCBub24tSEUsIEJXMTYwICovXG4rXHR1OCBnMl9oZTtcdFx0LyogR0ksIEhFLCBCVzIwICovXG4rXHR1OCBnNF9oZTtcdFx0LyogR0ksIEhFLCBCVzQwICovXG4rXHR1OCBnOF9oZTtcdFx0LyogR0ksIEhFLCBCVzgwICovXG4rXHR1OCBnMTZfaGU7XHRcdC8qIEdJLCBIRSwgQlcxNjAgKi9cbitcdHU4IGdpX2VodDtcdFx0LyogR0ksIEVIVCAqL1xuK1x0dTggaHRfbGRwYztcbitcdHU4IHZodF9sZHBjO1xuK1x0dTggaGVfbGRwYztcbitcdHU4IGVodF9sZHBjO1xuK1x0dTggYWY7XG4rXHR1OCByYXRlX2lkeDtcdFx0LyogaW5kZXggaW50byByYXRlX2NvZGVbXSBjdXJyZW50bHkgaW4gdXNlICovXG4rXHRfX2xlMTYgcmF0ZV9jb2RlW01UNzkyNV9BVVRPX1JBVEVfTlVNXTtcbitcdF9fbGUzMiByc3ZbNF07XG4rfSBfX3BhY2tlZDtcbitcbitpbnRcbittdDc5MjVfZ2V0X2FwX3N0YV9yZWNfaWR4KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICpzdGFfcmVjX2lkeCk7XG4rXG4rdm9pZFxuK210NzkyNV9wcmludF9sYXN0X3R4X3JhdGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBfX2xlMzIgbGVfdHh2WzNdKTtcbitcbit1OFxuK210NzkyNV93dGJsX2dldF9zZ2koY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyLCB1OCB0eG1vZGUsIHU4IGZjYXApO1xuK1xuK3U4XG4rbXQ3OTI1X3d0YmxfZ2V0X2xkcGMoY29uc3Qgc3RydWN0IG10NzkyNV93dGJsX3JhdGUgKndyLCB1OCB0eG1vZGUpO1xuK1xuK2NoYXIgKm10NzkyNV9od19yYXRlX29mZG1fc3RyKHU4IG9mZG1faWR4KTtcbitcbitpbnQgbXQ3OTJ4X21jdV9nZXRfd3RibF9yYXRlKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUxNiB3bGFuX2lkeCxcbitcdFx0XHQgICAgIHN0cnVjdCBtdDc5MjVfd3RibF9yYXRlICpyYXRlKTtcbitcbitpbnQgbXQ3OTJ4X21jdV9nZXRfc3RhdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LFxuK1x0XHRcdHN0cnVjdCBtdDc5MjVfc3RhX3N0YXRzICpzdGF0cyk7XG4rXG4raW50IG10NzkyNV9tY3VfZ2V0X21pYl9pbmZvKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGJhbmRfaWR4LFxuK1x0XHRcdCAgICBjb25zdCB1MzIgKmNvdW50ZXJzLCB1OCBjb3VudGVyX251bSxcbitcdFx0XHQgICAgdTY0ICp2YWx1ZXMpO1xuK1xuKy8qIEdFVF9TVEFUX0lORk8gKFVOSV9DTURfSURfR0VUX1NUQVRJU1RJQ1MgPSAweDIzKSxcbisgKiBzdWItY29tbWFuZCBVTklfQ01EX0dFVF9TVEFUSVNUSUNTX1RBR19MSU5LX1FVQUxJVFkgPSAxLlxuKyAqXG4rICogQGJhbmRfaWR4OiAgICAgICAgICAgIGJhbmQvQlNTIGluZGV4ICgwLi4zKVxuKyAqIEByc3NpOiAgICAgICAgICAgICAgICBvdXQsIG1vdmluZy1hdmVyYWdlIGJlYWNvbiBSU1NJIChkQm0pLCBtYXkgYmUgTlVMTFxuKyAqIEB0eF9saW5rX3NwZWVkX2ticHM6ICBvdXQsIFRYIGxpbmsgc3BlZWQgaW4ga2JpdC9zLCBtYXkgYmUgTlVMTFxuKyAqXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9FTlQgaWYgdGhlIGJhbmQncyBsaW5rIHF1YWxpdHkgaXMgbm90IHJlYWR5LlxuKyAqXG4rICogTk9URTogZmlybXdhcmUgcHJvdmlkZXMgb25seSBSU1NJIGFuZCBUWCByYXRlIGhlcmUuIFJYIHJhdGUvYmFuZHdpZHRoIGFyZVxuKyAqIG5vdCBpbiB0aGlzIGV2ZW50OyByZWFkIHdjaWQtXHUwMDNlcmF0ZSBmb3IgdGhlIFJYIHJhdGUuXG4rICovXG4raW50IG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCBiYW5kX2lkeCxcbitcdFx0XHRcdHM4ICpyc3NpLCB1MzIgKnR4X2xpbmtfc3BlZWRfa2Jwcyk7XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToxMjozMS4zMzk2Mzg1MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTMxNzM0MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlYnVnZnMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIGBtdDc5MjVgIHdpcmVsZXNzIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBkcml2ZXIncyBmdXp6YWJpbGl0eS4gVGhlIHBhdGNoIGFkZHMgYSBuZXcgZGVidWdmcyBmaWxlLCBgc3RhdHNgLCBmb3IgdGhlIGBtdDc5MjVgIGRyaXZlci4gSXQgaW5jbHVkZXMgYHN0YXRzLmNgLCBgc3RhdHMuaGAgYW5kIG1vZGlmaWVzIGBkZWJ1Z2ZzLmNgIHRvIHJlZ2lzdGVyIHRoZSBmaWxlIGFuZCBhbHNvIGFkZHMgc29tZSBuZXcgZW51bXMgaW4gYG10NzZfY29ubmFjX21jdS5oYC5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWwgY29kZSBwYXRocyB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBUaGUgYHN0YXRzYCBkZWJ1Z2ZzIGZpbGUgc2VlbXMgdG8gYmUgcmVhZGluZyBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlIHZpYSBNQ1UgY29tbWFuZHMuIERlYnVnZnMgZmlsZXMgYXJlIGdlbmVyYWxseSBsb3ctcHJpb3JpdHkgZm9yIGZ1enppbmcsIHVubGVzcyB0aGUgcGFyc2luZyBvciBzdGF0ZSBjaGFuZ2UgaXMgY29tcGxleCwgYnV0IGhlcmUgaXQncyBqdXN0IGEgc2ltcGxlIHF1ZXJ5LWFuZC1wcmludCBzaXR1YXRpb24uXG5cbkxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEZyb20gaW5zcGVjdGluZyBgbXQ3OTI1L2RlYnVnZnMuY2AsIHRoZSBwYXRjaCBjcmVhdGVzIHRoaXMgZGVidWdmcyBmaWxlIHVzaW5nIGBkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGVgIGFuZCBhc3NvY2lhdGVzIGl0IHdpdGggYG10NzkyeF9zdGF0c2AuIFJpZ2h0LCBzbyBpdCdzIGEgc2ltcGxlIGRlYnVnZnMgZmlsZS4gQWxsIHRoZSBhY3R1YWwgd29yayBoYXBwZW5zIHdpdGhpbiBgbXQ3OTJ4X3N0YXRzYCwgd2hpY2ggaXRzZWxmIGNhbGxzIHZhcmlvdXMgZnVuY3Rpb25zIGRlZmluZWQgaW4gYHN0YXRzLmNgLiBMb29raW5nIGF0IHRob3NlIGZ1bmN0aW9ucyDigJMgYG10NzkyNV9nZXRfYXBfc3RhX3JlY19pZHhgLCBgbXQ3OTI1X3ByaW50X2xhc3RfdHhfcmF0ZWAsIGFuZCBzbyBvbiDigJMgaXQncyBjbGVhciB0aGV5J3JlIGFsbCByZWxhdGVkIHRvIGdhdGhlcmluZyBhbmQgcHJpbnRpbmcgdGhlc2Ugc3RhdHMuXG5cbkFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zICpleHBvc2VkKiBvciB1c2VkIG91dHNpZGUgb2YgdGhlIGRlYnVnZnMgZW50cnk/IEkgbmVlZCB0byBtYWtlIHN1cmUuIE5vcGUsIHRoZXkncmUgYWxsIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBtdDc5Mnhfc3RhdHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBvZiB0aGVzZSByb3V0aW5lcyBpbiBvdGhlciBwYXRjaGVzIGluIHRoZSBzZXJpZXMuIEJ1dCBmcm9tIHRoZSBwYXRjaCBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYG10NzkyNV9tY3VfZ2V0X2xpbmtfcXVhbGl0eWAgaXMgbm90IHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGlzIHBhdGNoLlxuXG5TbywgaXQncyAqanVzdCogYWRkaW5nIGEgZGVidWdmcyBmaWxlLiBFdmVuIHRob3VnaCBpdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgZmlybXdhcmUgdmlhIE1DVSBjb21tYW5kcywgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIGlzbid0IGNoYW5naW5nIGhvdyB0aGUgY29yZSBkcml2ZXIgKmZ1bmN0aW9ucyouIE5vdyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHByb21wdCBmb3IgbXkgYW5hbHlzaXMuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHRoaW5ncyBsaWtlOlxuXG4qICAgTW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50c1xuKiAgIExvZ2dpbmcgKHByaW50aywgcHJfZXJyKSBvciB0cmFjZXBvaW50c1xuKiAgIENvbnN0YW50L21hY3JvIGNoYW5nZXMgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24gZmxvd1xuKiAgIFVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzXG5cbkRlYnVnZnMgYWRkaXRpb25zIGZvciBzdGF0aXN0aWNzIGZhbGwgdW5kZXIgdGhlIFwicHVyZWx5IGRlY29yYXRpdmVcIiBjYXRlZ29yeS4gVGhleSBkb24ndCBjaGFuZ2UgaG93IHRoZSBkcml2ZXIgKm9wZXJhdGVzKi4gU28gZnJvbSB0aGUgcHJvbXB0LCBJJ20gbGVhbmluZyB0b3dhcmQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkFsc28sIEkgaGF2ZSB0byBjb25zaWRlciB0aGF0IGBtdDc5MjVgIGlzIGEgTWVkaWFUZWsgV2ktRmkgNyBkcml2ZXIgKFBDSWUvVVNCKS4gV2hpbGUgbWFjODAyMTFfaHdzaW0gKnNpbXVsYXRlcyogV2ktRmksIGl0IGRvZXNuJ3QgZW11bGF0ZSB0aGUgc3BlY2lmaWMgaGFyZHdhcmUuIFRoaXMgZHJpdmVyIG5lZWRzIHJlYWwgaGFyZHdhcmUgb3IgYW4gZW11bGF0b3IuIEJ1dCwgd2FpdCwgaXMgYG10NzkyNXVgIGEgVVNCIGRyaXZlcj8gU2luY2UgdGhlIHByb21wdCBnaXZlcyBVU0IgYSBwYXNzLCBjYW4gc3l6a2FsbGVyIGZ1enogdGhlIGBtdDc5MjV1YCBkcml2ZXIgdmlhIGB2aGNpYD8gU3l6a2FsbGVyIGhhcyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMgdmlhIGR1bW15XFxfaGNkL3ZoY2kuIEknbSBnb2luZyB0byBzZXQgYXNpZGUgdGhlIFBDSWUgdnMgVVNCIGRpc2N1c3Npb24sIGJlY2F1c2UgdGhlIHBhdGNoIG9ubHkgYWRkcyBhIHJlYWQgZnVuY3Rpb24gdG8gZGVidWdmcy5cblxuVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBhIGRpYWdub3N0aWMgdG9vbC4gSXQgZG9lc24ndCBtb2RpZnkgdGhlIGRyaXZlcidzIGZ1bmN0aW9uYWwgYmVoYXZpb3IgaW4gYW55IHdheS4gSSdtIGNvbmZpZGVudCBpbiByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgY2FuIG5vdyB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgcHJvdmlkZSB0aGF0IHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwNDIsIk91dHB1dFRva2VucyI6NjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MTI6NTAuNjU2OTg0MDg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYSBkZWJ1Z2ZzIGVudHJ5IHRvIHF1ZXJ5IGFuZCBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGZpcm13YXJlLiBJdCBpcyBhIGRpYWdub3N0aWMvbG9nZ2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGRyaXZlcidzIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgZGVidWdmcyBlbnRyeSB0byBxdWVyeSBhbmQgcHJpbnQgc3RhdGlzdGljcyBmcm9tIHRoZSBmaXJtd2FyZS4gSXQgaXMgYSBkaWFnbm9zdGljL2xvZ2dpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBkcml2ZXIncyBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEyOjUwLjY1NzAwMzA4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhjlc[1] Phase: Running StartedAt: 2026-08-27 09:13:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhjlc[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-27 09:13:02 +0000 UTC FinishedAt: 2026-08-27 09:13: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,}