ZGlmZiAtLWdpdCBhL2F1dG8vaW5pdCBiL2F1dG8vaW5pdAppbmRleCBlYmNhNDQ0Li5iYzRkOGJiIDEwMDY0NAotLS0gYS9hdXRvL2luaXQKKysrIGIvYXV0by9pbml0CkBAIC0zNiwzICszNiwyOSBAQAogICAgIG5neF9uPQogICAgIG5neF9jPSdcYycKIGZpCisKKworCitpZiB0ZXN0ICEgLWYgTWFrZWZpbGU7IHRoZW4KKworICAgIGNhdCA8PCBFTkQgPiBNYWtlZmlsZQorCitidWlsZDoKKwlcJChNQUtFKSAtZiAkT0JKUy9NYWtlZmlsZQorCitpbnN0YWxsOgorCVwkKE1BS0UpIC1mICRPQkpTL01ha2VmaWxlIGluc3RhbGwKKworY2xlYW46CisJcm0gLXJmIE1ha2VmaWxlICRPQkpTCisKK3VwZ3JhZGU6CisJJFNCSU5fUEFUSCAtdAorCWtpbGwgLVVTUjIgXGBjYXQgJFBJRF9QQVRIXGAKKwlzbGVlcCAxCisJdGVzdCAtZiAkUElEX1BBVEgubmV3YmluCisJa2lsbCAtV0lOQ0ggXGBjYXQgJFBJRF9QQVRIXGAKKworRU5ECisKK2ZpCmRpZmYgLS1naXQgYS9hdXRvL2luc3RhbGwgYi9hdXRvL2luc3RhbGwKaW5kZXggYjgzOGI5Yi4uNTdlMzAxOSAxMDA2NDQKLS0tIGEvYXV0by9pbnN0YWxsCisrKyBiL2F1dG8vaW5zdGFsbApAQCAtMzgsMjggKzM4LDMgQEAKIEVORAogCiBmaQotCi0KLWlmIHRlc3QgISAtZiBNYWtlZmlsZTsgdGhlbgotCi0gICAgY2F0IDw8IEVORCA+IE1ha2VmaWxlCi0KLWJ1aWxkOgotCVwkKE1BS0UpIC1mICRPQkpTL01ha2VmaWxlCi0KLWluc3RhbGw6Ci0JXCQoTUFLRSkgLWYgJE9CSlMvTWFrZWZpbGUgaW5zdGFsbAotCi1jbGVhbjoKLQlybSAtcmYgTWFrZWZpbGUgJE9CSlMKLQotdXBncmFkZToKLQkkU0JJTl9QQVRIIC10Ci0Ja2lsbCAtVVNSMiBcYGNhdCAkUElEX1BBVEhcYAotCXNsZWVwIDEKLQl0ZXN0IC1mICRQSURfUEFUSC5uZXdiaW4KLQlraWxsIC1XSU5DSCBcYGNhdCAkUElEX1BBVEhcYAotCi1FTkQKLQotZmkKZGlmZiAtLWdpdCBhL2F1dG8vc291cmNlcyBiL2F1dG8vc291cmNlcwppbmRleCA0MGZiYWQyLi42ZTIxYTQxIDEwMDY0NAotLS0gYS9hdXRvL3NvdXJjZXMKKysrIGIvYXV0by9zb3VyY2VzCkBAIC0xMzgsNiArMTM4LDcgQEAKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9zaGFyZWQuYyBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9kYWVtb24uYyBcCisgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfc2V0cHJvY3RpdGxlLmMgXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYyBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIgogCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IGEyNzc1OTUuLmE0M2NkNDYgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC0xLDk3OSArMSwxMjMgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtUiIgPz4KLTwhRE9DVFlQRSBjaGFuZ2VfbG9nIFNZU1RFTSAiLi4vZHRkL2NoYW5nZXMuZHRkIiA+Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJrb2k4LXIiID8+Cis8IURPQ1RZUEUgY2hhbmdlX2xvZyBTWVNURU0gIi4uLy4uL2R0ZC9jaGFuZ2VzLmR0ZCIgPgogCiAKLTxjaGFuZ2VfbG9nIHRpdGxlPSJtb2RfYWNjZWwiPgorPGNoYW5nZV9sb2cgbGluaz0iL25naW54L2NoYW5nZXMuaHRtbCIgcGF0aD0iL25naW54LyIgcm9vdD0iLi4iCisgICAgICAgICAgICB0aXRsZT0ibmdpbngiPgogCiAKLTxjaGFuZ2VzIHZlcj0iMS4wLjI5IiBkYXRlPSIxNS4wNi4yMDAzIj4KKzxjaGFuZ2VzIHZlcj0iMC4xLjEiIGRhdGU9IjExLjEwLjIwMDQiPgogCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgogPHBhcmEgbGFuZz0icnUiPgotbW9kX2FjY2VsIM7FIM/Q0sXExczRzCDJIM7FINDB1N7JzCBFQVBJLCDF08zJINPPwsnSwczT0SDXzcXT1MUKLdMgbW9kX3NzbC0yLjguMTMtMS4zLjI3Ky4KK8TJ0sXL1MnXwSBnemlwX3R5cGVzLgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgotbW9kX2FjY2VsIGRpZCBub3QgZGV0ZWN0IGFuZCBwYXRjaCBicm9rZW4gRUFQSSB3aGVuIGJ1aWx0IHdpdGgKLW1vZF9zc2wtMi44LjEzLTEuMy4yNysuCit0aGUgZ3ppcF90eXBlcyBkaXJlY3RpdmUuCiA8L3BhcmE+CiA8L2NoYW5nZT4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KIDxwYXJhIGxhbmc9InJ1Ij4KLdDSySDQ0s/L08nSz9fBzsnJINMg0M/Nz93YwCDNz8TVzNEgbW9kX3Jld3JpdGUgbW9kX2FjY2VsCi3Qz8TExdLWydfBxdQg0MXSxdDJ09nXwc7JxSDawcfPzM/Xy8/XICJMb2NhdGlvbiIgySAiUmVmcmVzaCIg0yDQz83P3djACi3c1M/HzyDWxSDNz8TVzNEgyQotxMzRINzUz8fPIDwhLS0g3NTJIMTXwSDMydvOycgg08zP18EgzsHQydPBztkgxMzRINTV0M/HzyB4c2x0cHJvYyAtLT4KLdXLwdrZ18HF1CDJzdEgwtzLxc7EwSDXINDF0sXNxc7Oz8oKLdPSxcTZICJBQ0NFTF9SRVdSSVRFIi4KK8TJ0sXL1MnXwSB0Y3Bfbm9kZWxheS4KIDwvcGFyYT4KIDxwYXJhIGxhbmc9ImVuIj4KLXdoZW4gcmVxdWVzdCBpcyBwcm94aWVkIHdpdGggdGhlIGhlbHAgb2YgbW9kX3Jld3JpdGUgbW9kdWxlIG1vZF9hY2NlbAotc2V0IHRoZSBiYWNrZW5kIG5hbWUgaW4gdGhlICJBQ0NFTF9SV1JJVEUiIGVudmlyb21lbnQgdmFyaWFibGUgYW5kCi1zdXBwb3J0cyB0aGUgcmV3cml0aW5nIG9mICJMb2NhdGlvbiIgYW5kICJSZWZyZXNoIiBoZWFkZXJzIHdpdGggdGhlIGhlbHAgb2YKLW1vZF9yZXdyaXRlIG1vZHVsZS4KK3RoZSB0Y3Bfbm9kZWxheSBkaXJlY3RpdmUuCiA8L3BhcmE+CiA8L2NoYW5nZT4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KIDxwYXJhIGxhbmc9InJ1Ij4KLW1vZF9hY2NlbCDQxdLF0MnT2dfBxdQg08/ExdLWyc3PxSDawcfPzM/Xy8EgIkRlc3RpbmF0aW9uIiwKLcXTzMkgyc3RIMjP09TBINcg3NTPzSDawcfPzM/Xy8Ug08/X0MHEwcXUINMg08/ExdLWyc3ZzQot2sHHz8zP18vBICJIb3N0IiwgyczJINbFIMXTzMkgVVJJIM7FIMHC08/MwNTO2couCivEydLFy9TJ18Egc2VuZF9sb3dhdCDSwcLP1MHF1CDOxSDUz8zYy88gzsEg0MzB1MbP0s3ByCwg0M/ExMXS1snXwcDdycgKK2txdWV1ZSBOT1RFX0xPV0FULCDOzyDJIM7BINfTxcgsINDPxMTF0tbJ18HA3cnIIFNPX1NORExPV0FULgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgotbW9kX2FjY2VsIG5vdyByZXdyaXRlcyAiRGVzdGluYXRpb24iIGhlYWRlciBpZiB0aGUgaG9zdCBuYW1lIGluIHRoaXMgaGVhZGVyCi1pcyBhcyBpbiAiSG9zdCIgaGVhZGVyIG9yIGlmIHRoZSBkZXN0aW5hdGlvbiBVUkkgaXMgbm90IGFic29sdXRlLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLW1vZF9hY2NlbCDawcPJy8zJ18HM09Eg1yDTzNXewcUsIMXTzMkgy8zJxc7UINrB0NLB28nXwcwgYnl0ZSByYW5nZSwKLcEgwtzLxc7EIM7FINDF0sXEwdfBzCDL3NvJ0tXFzdnKIM/U18XUINDPzM7P09TYwC4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLW1vZF9hY2NlbCB3ZW50IGludG8gYW4gZW5kbGVzcyBsb29wIGlmIHRoZSBjbGllbnQgcmVxdWVzdGVkIHRoZSBieXRlIHJhbmdlCi1hbmQgdGhlIGJhY2tlbmQgZGlkIG5vdCBzZW5kIHRoZSBmdWxsIGNhY2hhYmxlIHJlc3BvbnNlLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4yOCIgZGF0ZT0iMDIuMDUuMjAwMyI+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLdPExczBzsEg0NLP18XSy8EgySDQwdTeIMTM0SBFQVBJIMnaIG1vZF9zc2wtMi44LjEzLTEuMy4yNysuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1icm9rZW4gRUFQSSBmcm9tIG1vZF9zc2wtMi44LjEzLTEuMy4yNysgbm93IGlzIGNoZWNrZWQgYW5kIHBhdGNoZWQuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotxMnSxcvUydfBIEFjY2VsU2V0WFVSSSDOxSDSwcLP1MHMwS4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLUFjY2VsU2V0WFVSSSBkaXJlY3RpdmUgZGlkIG5vdCB3b3JrLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4yNyIgZGF0ZT0iMjYuMDIuMjAwMyI+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLcLcy8XOxNksIMnT0M/M2NrVwN3JxSBuYW1lZC1iYXNlZCDXydLV1MHM2M7ZxSDIz9PU2SwgzsUgwtnMySDEz9PU1dDO2Qot3sXSxdogX3RoZV9zYW1lX2hvc3RfLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotYmFja2VuZHMgdGhhdCB1c2UgbmFtZWQtYmFzZWQgdmlydHVhbCBob3N0cyBjYW4gbm90IGJlIGFjY2Vzc2VkIHZpYQotX3RoZV9zYW1lX2hvc3RfLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4yNiIgZGF0ZT0iMjAuMTIuMjAwMiI+Ci0KLTxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLUFjY2VsUmV2ZXJzZSDSwcLP1MHF1CDJIMTM0SDawdDSz9PP1ywg0NLPy9PJ0s/Xwc7O2cgg3sXSxdogQWNjZWxQYXNzLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotQWNjZWxSZXZlcnNlIHdvcmtzIGZvciBBY2NlbFBhc3MnZWQgcmVxdWVzdHMgdG9vLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLWFjdGlvbiByZW1vdmUg1yBhY2NlbC1jYWNoZW1nciDOxSDSwcLP1MHMINMgVVJMLCDXIMvP1M/S2cgg08nN18/M2Qoty8/EydLP18HMydPYINcg18nExSAlWFguCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1hY2NlbC1jYWNoZW1ncidzIHJlbW92ZSBhY3Rpb24gZGlkIG5vdCB3b3JrIHdpdGggVVJMcyB3aXRoIGNoYXJhY3RlcnMKLWVuZGNvZGVkIGFzICVYWC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KLQotPGNoYW5nZXMgdmVyPSIxLjAuMjUiIGRhdGU9IjIwLjExLjIwMDIiPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3GzMHHySDEz9DPzM7J1MXM2M7ZyCDNz8TVzMXKIFIsIFEgySBGINrBzMnQwczJINcgy9zbxSDEzyDUxcgg0M/SLCDQz8vBCi3GwcrMIM7FINXEwczRzNPRIMnaIMvc28EuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1hZGRpdGlvbmFsIG1vZHVsZXMgUiwgUSBhbmQgRiBmbGFncyB3ZXJlIHN0aWNreSB1bnRpbCBjYWNoZSBmaWxlIHdhcwotbm90IHJlbW92ZWQgZnJvbSBjYWNoZS4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3OxSDSwcLP1MHMIGFjdGlvbiByZW1vdmUg1yBhY2NlbC1jYWNoZW1nci4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLWFjY2VsLWNhY2hlbWdyJ3MgcmVtb3ZlIGFjdGlvbiBkaWQgbm90IHdvcmsuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotxMHXzs8gzsXNxc7Rxc3ZxSDEz8vVzcXO1NkgzsUgy9zbydLP18HMydPYLCDF08zJIMTM0SDL3NvJ0s/Xwc7J0QotydPQz8zY2s/XwczT0SBBY2NlbExhc3RNb2RpZmllZEZhY3Rvci4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLWxvbmcgaW52YXJpYWJsZSBkb2N1bWVudHMgd2VyZSBub3QgY2FjaGVkIGlmIEFjY2VsTGFzdE1vZGlmaWVkRmFjdG9yCi13YXMgdXNlZCB0byBjaG9vc2UgY2FjaGUgdGltZS4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KLQotPGNoYW5nZXMgdmVyPSIxLjAuMjQiIGRhdGU9IjIxLjEwLjIwMDIiPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3F08zJINcgVVJMLCDTz9rEwc7O2c0gzc/E1czFzSBtb2RfcmV3cml0ZSwgzsHIz8TJzMnT2Aot08nN18/M2SA8bm9icj7XINfJxMUgJVhYLDwvbm9icj4KLdTPIM/OySDQxdLFxMHXwczJ09ggwtzLxc7E1SDXINLB08vS2dTPzSDXycTFLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotaWYgbW9kX3Jld3JpdGUgY3JlYXRlZCBVUkwgY29udGFpbmVkIGNoYXJhY3RlcnMgZW5jb2RlZCBhcyAlWFggdGhlbgotdGhleSB3YXMgcGFzc2VkIHRvIGJhY2tlbmQgdW5lc2NhcGVkLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLcvMwN4gLURNT0RfUkVXUklURV9ESVNBQkxFX1RPX1BST1hZX1NVQlJFUS4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLS1ETU9EX1JFV1JJVEVfRElTQUJMRV9UT19QUk9YWV9TVUJSRVEgc3dpdGNoIHdhcyBhZGRlZC4KK3RoZSBzZW5kX2xvd2F0IGRpcmVjdGl2ZSBpcyB3b3JraW5nIG5vdCBvbmx5IG9uIE9TZXMgdGhhdCBzdXBwb3J0CitrcXVldWUgTk9URV9MT1dBVCwgYnV0IGFsc28gb24gT1NlcyB0aGF0IHN1cHBvcnQgU09fU05ETE9XQVQuCiA8L3BhcmE+CiA8L2NoYW5nZT4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KIDxwYXJhIGxhbmc9InJ1Ij4KLdDF0sXNxc7OwdEg09LFxNkgQUNDRUxfTk9DQUNIRS4KK9zN1czRw8nRIHNldHByb2N0aXRsZSgpIMTM0SBMaW51eCDJIFNvbGFyaXMuCiA8L3BhcmE+CiA8cGFyYSBsYW5nPSJlbiI+Ci1BQ0NFTF9OT0NBQ0hFIGVudmlyb21lbnQgdmFyaWFibGUgd2FzIGFkZGVkLgordGhlIHNldHByb2N0aXRsZSgpIGVtdWxhdGlvbiBmb3IgTGludXggYW5kIFNvbGFyaXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorz9vJwsvBINDSySDQxdLF0MnT2dfBzsnJINrBx8/Mz9fLwSAiTG9jYXRpb24iINDSySDQ0s/L08nSz9fBzsnJLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJMb2NhdGlvbiIgaGVhZGVyIHJld3JpdGUgYnVnIGZpeGVkIHdoaWxlIHRoZSBwcm94aW5nLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8/bycLLwSDXIM3PxNXMxSBuZ3hfaHR0cF9jaHVua2VkX21vZHVsZSwg0NLJ18/EydfbwdEgyyDawcPJy8zJ18HOycAuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbmd4X2h0dHBfY2h1bmtlZF9tb2R1bGUgbW9kdWxlIGJ1ZyBmaXhlZCB0aGF0IGNhdXNlZCBhbiBlbmRsZXNzIGxvb3AuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorz9vJwsvJINcgzc/E1czFIC9kZXYvcG9sbC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAvZGV2L3BvbGwgbW9kdWxlIGJ1Z3MgZml4ZWQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJINDSz8vTydLP18HOyckgySDJ09DPzNjaz9fBzsnJINfSxc3Fzs7ZyCDGwcrMz9cgz9TXxdTZINDP0tTJzMnT2C4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSByZXNwb25zZXMgd2VyZSBjb3JydXB0ZWQgd2hlbiB0aGUgdGVtcG9yYXJ5IGZpbGVzIHdlcmUgdXNlZAord2hpbGUgdGhlIHByb3hpbmcuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorwtzLxc7E1SDQxdLFxMHXwczJ09gg2sHQ0s/T2SDTIM7F0MXSxcvPxMnSz9fBzs7Zzckg08nN18/Mwc3JLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIHVuZXNjYXBlZCByZXF1ZXN0cyB3ZXJlIHBhc3NlZCB0byB0aGUgYmFja2VuZC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivOwSBMaW51eCAyLjQg0NLJIMvPzsbJx9XSwcPJySDTws/Sy8kgztXWzs8gwtnMzyDPwtHawdTFzNjOzyDJ09DPzNjaz9fB1NgKK9DB0sHNxdTSIC0td2l0aC1wb2xsX21vZHVsZS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3doaWxlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9uIExpbnV4IDIuNCB0aGUgLS13aXRoLXBvbGxfbW9kdWxlIHBhcmFtZXRlcgord2FzIHJlcXVpcmVkLgogPC9wYXJhPgogPC9jaGFuZ2U+CiAKIDwvY2hhbmdlcz4KIAogCi08Y2hhbmdlcyB2ZXI9IjEuMC4yMyIgZGF0ZT0iMzAuMDguMjAwMiI+Ci0KLTxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLdcgxMnSxcvUydfFIEZyZWV6ZVN0YXJ0LgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotaW4gRnJlZXplU3RhcnQgZGlyZWN0aXZlLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Ci08cGFyYSBsYW5nPSJydSI+Ci3EydLFy9TJ18EgQWNjZWxDYWNoZVNldENvb2tpZS4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLUFjY2VsQ2FjaGVTZXRDb29raWUgZGlyZWN0aXZlLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLUFjY2VsQ2FjaGVSb290IM7FINDPzsnNwcwg0MHSwc3F1NLZINcgy8HX2d7LwcguCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1BY2NlbENhY2hlUm9vdCBkaWQgbm90IHVuZGVyc3RhbmQgcXVvdGVkIHBhcmFtZXRlcnMuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotzc/E1czYIG1vZF9mcmVlemUgzsUg2sHNz9LB1snXwcwg08jFzdksIMXTzMkgz87JINXLwdrBztkg1wotz8TJzsHSztnIIMvB19ney8HILgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotbW9kX2ZyZWV6ZSBkaWQgbm90IGZyZWV6ZSBzY2hlbWFzIGlmIHRoZXkgd2FzIHF1b3RlZCBpbiBhcG9zdHJvcGhlcy4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3Nz8TVzNggbW9kX2ZyZWV6ZSDOxSDawc3P0sHWydfBzCDU3Mcgc3R5bGUsINDB0sHNxdTSIHN0eWxlIMkKLdPIxc3VIGJlaGF2aW9yOi4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLW1vZF9mcmVlemUgZGlkIG5vdCBmcmVlemUgc3R5bGUgdGFnLCBzdHlsZSBwYXJhbWV0ZXIgYW5kIGJlaGF2aW9yOiBzY2hlbWEuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgot0M/TzMXEz9fB1MXM2M7P09TYINfJxMEgJmx0OyZsdDtzY3JpcHQgzsUg2sHNz9LB1snXwczB09ggzc/E1czFzSBtb2RfZnJlZXplLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotJmx0OyZsdDtzY3JpcHQgc2VxdWVuY2Ugd2FzIG5vdCBmcm96ZW4gYnkgbW9kX2ZyZWV6ZS4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Ci08cGFyYSBsYW5nPSJydSI+Ci3P0NTJzcnaydLP18HOIMHMx8/SydTNINDPydPLwSDXIM3PxNXMxSBtb2RfZnJlZXplLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotbW9kX2ZyZWV6ZSdzIHNlYXJjaCBhbGdvcml0aG0gd2FzIG9wdGltaXplZC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KLQotPGNoYW5nZXMgdmVyPSIxLjAuMjIiIGRhdGU9IjEyLjA4LjIwMDIiPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3GzMHHySDEz9DPzM7J1MXM2M7ZyCDNz8TVzMXKIFIsIFEgySBGIM7FINfZ09TB18zRzMnT2CwKLcXTzMkg2sHQ0s/TIMLZzCDOxcvc28nS1cXN2c0uCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1hZGRpdGlvbmFsIG1vZHVsZXMgUiwgUSBhbmQgRiBmbGFncyB3ZXJlIG5vdCBzZXQKLWlmIHJlcXVlc3Qgd2FzIG5vdCBjYWNoYWJsZS4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgotPHBhcmEgbGFuZz0icnUiPgotxMnSxcvUydfBIEFjY2VsUGFzc1hBY2NlbC4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLUFjY2VsUGFzc1hBY2NlbCBkaXJlY3RpdmUuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLc3PxNXM2CBtb2RfZnJlZXplLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotbW9kX2ZyZWV6ZSBtb2R1bGUuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPC9jaGFuZ2VzPgotCi0KLTxjaGFuZ2VzIHZlcj0iMS4wLjIxIiBkYXRlPSIwNC4wNy4yMDAyIj4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotxMnSxcvUydfBICJBY2NlbFBhc3NTZXJ2ZXIgb2ZmIiDXIEFwYWNoZS0xLjMuMjYg18/Pwt3FIM7FINfZxMHXwczBCi3awcfPzM/Xz8sgIlNlcnZlciIuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci0iQWNjZWxQYXNzU2VydmVyIG9mZiIgZGlkIG5vdCBzZW5kIGFueSAiU2VydmVyIiBoZWFkZXIgaW4gQXBhY2hlLTEuMy4yNi4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgotPHBhcmEgbGFuZz0icnUiPgotxM/L1c3FztTBw8nRINDPIG1vZF9hY2NlbCDLz9DJ0tXF1NPRINcgL21hbnVhbC9tb2QvbW9kX2FjY2VsLmh0bWwuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1tb2RfYWNjZWwgUnVzc2lhbiBkb2N1bWVudGF0aW9uIGlzIGNvcGllZCBpbiAvbWFudWFsL21vZC9tb2RfYWNjZWwuaHRtbC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KLQotPGNoYW5nZXMgdmVyPSIxLjAuMjAiIGRhdGU9IjI0LjA2LjIwMDIiPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3QwdLBzcXU0iBNUCDXIMTJ0sXL1MnXxSBBY2NlbFBhc3Mg0sHCz9TBzCDOxcvP0tLFy9TOzywgxdPMySDUwcvWxQotwtnMINrBxMHMINDB0sHNxdTSIFBIIMnMySDJ09DPzNjaz9fBzM/T2CDT0MXDycHM2M7PxSDJzdEgX3RoZV9zYW1lX2hvc3RfLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotQWNjZWxQYXNzIE1QIHBhcmFtZXRlciB3YXMgd29ya2VkIGluY29ycmVjdGx5IGlmIHVzZWQgd2l0aCBQSCBwYXJhbWV0ZXIKLW9yIHdpdGggc3BlY2lhbCBfdGhlX3NhbWVfaG9zdF8gaG9zdCBuYW1lLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4xOSIgZGF0ZT0iMjkuMDUuMjAwMiI+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLdfPINfSxc3RINDMwdfOz8fPIChncmFjZWZ1bCkg0sXT1MHS1MEgzc/HINDSz8naz8rUySBzZWdtZW50YXRpb24gZmF1bHQKLdcgz9POz9fOz80g0NLPw8XT08UsIMXTzMkg19PFINLBws/eycUg08zP1NkgwtnMySDawc7R1NkuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1zZWdtZW50YXRpb24gZmF1bHQgY2FuIG9jY3VyIGluIG1haW4gcHJvY2VzcyB3aGlsZSBncmFjZWZ1bCByZXN0YXJ0Ci13aGVuIGFsbCBjaGlsZCBzbG90cyB3ZXJlIGJ1c3kuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPC9jaGFuZ2VzPgotCi0KLTxjaGFuZ2VzIHZlcj0iMS4wLjE4IiBkYXRlPSIxMi4wNC4yMDAyIj4KLQotPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLcTJ0sXL1MnX2SBBY2NlbFJldHJ5NVhYIMkgQWNjZWxTZXRYVVJJLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotQWNjZWxSZXRyeTVYWCBhbmQgQWNjZWxTZXRYVVJJIGRpcmVjdGl2ZXMgd2VyZSBhZGRlZC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgotPHBhcmEgbGFuZz0icnUiPgot2sHNxdTLySBhY2NlbF9yZXF1ZXN0X2JvZHkgySBhY2NlbF9yZXdyaXRlX3Jlc3BvbnNlLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotYWNjZWxfcmVxdWVzdF9ib2R5IGFuZCBhY2NlbF9yZXdyaXRlX3Jlc3BvbnNlIG5vdGVzIHdlcmUgYWRkZWQuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotbW9kX2FjY2VsIM7FINPPwsnSwczT0SDLz83QyczR1M/Sz80gYUNDIM7BINDMwdTGz9LNxSBIUC1VWC4KLfPQwdPJws8gTWFya28gQXNwbHVuZCwgYXNwYTxhdC8+a3Jvbm9kb2MuZmkuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1tb2RfYWNjZWwgaXMgbm90IGJ1aWx0IGJ5IGFDQyBvbiBIUC1VWC48YnIvPgotVGhhbmtzIHRvIE1hcmtvIEFzcGx1bmQsIGFzcGE8YXQvPmtyb25vZG9jLmZpLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLcvP083F1MnexdPLycUg0NLB18vJLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotY29kZSBjbGVhbiB1cC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KLQotPGNoYW5nZXMgdmVyPSIxLjAuMTciIGRhdGU9IjI5LjAzLjIwMDIiPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3F08zJINcgVVJMINDF0sXEIMHSx9XNxc7Uwc3JIM7ByM/EyczJ09gg08nN18/M2SA8bm9icj7XINfJxMUgJVhYLDwvbm9icj4KLdTPIM/OySDQxdLFxMHXwczJ09ggwtzLxc7E1SDXINLB08vS2dTPzSDXycTFLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotaWYgVVJMIGJlZm9yZSBhcmd1bWVudHMgY29udGFpbmVkIGNoYXJhY3RlcnMgZW5jb2RlZCBhcyAlWFggdGhlbgotdGhleSB3YXMgcGFzc2VkIHRvIGJhY2tlbmQgdW5lc2NhcGVkLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4xNiIgZGF0ZT0iMjcuMDMuMjAwMiI+Ci0KLTxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Ci08cGFyYSBsYW5nPSJydSI+Ci3XIMTJ0sXL1MnXxSBBY2NlbFBhc3Mgzc/Wzs8gydPQz8zY2s/XwdTYINPQxcPJwczYzs/FCi3JzdEgyM/T1MEgX3RoZV9zYW1lX2hvc3RfLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotc3BlY2lhbCBob3N0bmFtZSBfdGhlX3NhbWVfaG9zdF8gY2FuIGJlIHVzZWQgaW4gQWNjZWxQYXNzIGRpcmVjdGl2ZS4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3OxSDSwcLP1MHMzyDPx9LBzsnexc7JxSDLz8zJ3sXT1NfBINPPxcTJzsXOycogySDWxNXdycgg0NLPw8XT08/XCi3Q0skgydPQz8zY2s/Xwc7JySDGzMHHwSBQSCDXIMTJ0sXL1MnXxSBBY2NlbFBhc3MuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1saW1pdGlvbiBvZiBjb25uZWN0aW9ucyBhbmQgd2FpdGluZyBwcm9jZXNzZXMgZG9lcyBub3Qgd29yawotaWYgUEggZmxhZyBpbiBBY2NlbFBhc3MgZGlyZWN0aXZlIHdhcyB1c2VkLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Ci08cGFyYSBsYW5nPSJydSI+Ci3EydLFy9TJ18EgQWNjZWxQYXNzU2VydmVyLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotQWNjZWxQYXNzU2VydmVyIGRpcmVjdGl2ZSB3YXMgYWRkZWQuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPC9jaGFuZ2VzPgotCi0KLTxjaGFuZ2VzIHZlcj0iMS4wLjE1IiBkYXRlPSIxMi4wMy4yMDAyIj4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotxdPMySDNz8TVzMkgbW9kX3F1b3RlZCDJzMkgbW9kX3JhbmRiYW4gwtnMySDTz8LSwc7ZINPUwdTJ3sXTy8kKLcnMySDQz8TH0tXWwczJ09gg0yDQz83P3djAIExvYWRNb2R1bGUsIM7PIM7FIMLZzMkgxM/CwdfMxc7ZCi3EydLFy9TJ18/KIEFkZE1vZHVsZSDQz9PMxSDEydLFy9TJ19kgQ2xlYXJNb2R1bGVMaXN0LCDUzwotxMnSxcvUydfZINzUycggzc/E1czFyiDOxSDXz9PQ0snOyc3BzMnT2C4KLeXTzMkg1sUgxMnSxcvUydfZINzUycggzc/E1czFyiDOxSDJ09DPzNjaz9fBzMnT2CDXIMvPzsbJx9XSwcPJz87O2cggxsHKzMHILAot1M8g0NLJIMzAwtnIINrB0NLP08HILCDPwtLBwsHU2dfBxc3ZyCDNz8TVzMXNIG1vZF9hY2NlbCwKLdDSz8nTyM/Eycwgc2VnbWVudGF0aW9uIGZhdWx0LgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotaWYgbW9kX3F1b3RlZCBvciBtb2RfcmFuZGJhbiBtb2R1bGVzIHdlcmUgc3RhdGljYWxseSBidWlsZCAKLW9yIHdlcmUgbG9hZGVkIHdpdGggTG9hZE1vZHVsZSBkaXJlY3RpdmUgYW5kIHdlcmUgbm90IGFkZGVkCi13aXRoIEFkZE1vZHVsZSBkaXJlY3RpdmUgYWZ0ZXIgQ2xlYXJNb2R1bGVMaXN0IGRpcmVjdGl2ZSB0aGVuCi10aGVpciBkaXJlY3RpdmVzIHdlcmUgdW5yZWNvZ25pemVkLgotSWYgdGhlaXIgZGlyZWN0aXZlcyB3ZXJlIG5vdCB1c2VkIGluIGNvbmZpZ3JhdGlvbiBmaWxlcwotdGhlbiBhbnkgcmVxdWVzdCBoYW5kbGVkIGJ5IG1vZF9hY2NlbCBjYXVzZWQgc2VnbWVudGF0aW9uIGZhdWx0LgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4xNCIgZGF0ZT0iMjYuMDIuMjAwMiI+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLc7Fy8/S0sXL1M7PIM/C0sHCwdTZ18HMydPYIM/U18XU2SDC3MvFzsTBINMgws/M2NvJzckg2sHHz8zP18vBzckuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1iYWNrZW5kIHJlc3BvbnNlIHdpdGggYmlnIGhlYWRlciB3YXMgaW5jb3JyZWN0bHkgaGFuZGxlZC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9Indvcmthcm91bmQiPgotPHBhcmEgbGFuZz0icnUiPgotycfOz9LJ0tXA1NPRINPU0s/LySDUydDBICJIVFRQLzEuMCAyMDAgT0siINcg08XSxcTJzsUg2sHHz8zP18vBIM/U18XUwQotwtzLxc7EwS4g5M/CwdfMxc7BINrB0MnT2CDXIEVycm9yTG9nIM7Fy8/S0sXL1M7ZyCDawcfPzM/Xy8/XINcgz9TXxdTFCi3C3MvFzsTBLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotbGluZXMgbGlrZSAiSFRUUC8xLjAgMjAwIE9LIiBhcmUgaWdub3JlZCBpbiBtaWRkbGUgb2YgYmFja2VuZCByZXNwb25zZSBoZWFkZXIuCi1JbmNvcnJlY3QgYmFja2VuZCBoZWFkZXIgbGluZXMgYXJlIGxvZ2dlZCBpbiBFcnJvckxvZy4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3EydLFy9TJ18EgQWNjZWxJbnZhbGlkYXRlLCBhY2NlbC1jYWNoZW1nciDJINrBx8/Mz9fLySDUydDBCi08bm9icj4iUHJhZ21hOiBuby1jYWNoZSI8L25vYnI+IM7FIM/Czs/XzNHMySDL3NssCi3F08zJINrBxMHOwSDEydLFy9TJ18EgIkFjY2VsVW5saW5rTm9DYWNoZWQgb2ZmIi4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLUFjY2VsSW52YWxpZGF0ZSBkaXJlY3RpdmUsIGFjY2VsLWNhY2hlbWdyIGFuZCBoZWFkZXJzIGxpa2UKLTxub2JyPiJQcmFnbWE6IG5vLWNhY2hlIjwvbm9icj4gZGlkIG5vdCByZWZyZXNoIGNhY2hlCi1pZiBBY2NlbFVubGlua05vQ2FjaGVkIGRpcmVjdGl2ZSB3YXMgb2ZmLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLdDP0tHEz8sgzsHTzMXEz9fBzsnRIEFjY2VsUGFzcyDJ2s3FzqPOLCDTzsHewczBINDSz9fF0tHA1NPRCi3EydLFy9TJ19kgydog18nS1NXBzNjOz8fPINPF0tfF0sEsIMEg2sHUxc0gydogz9POz9fOz8fPLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotbWVyZ2Ugb3JkZXIgb2YgQWNjZWxQYXNzIGRpcmVjdGl2ZSBpcyBjaGFuZ2VkLiBWaXJ0dWFsIHNlcnZlciBkaXJlY2l0dmVzCi1hcmUgY2hlY2tlZCBmaXJzdC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KLQotPGNoYW5nZXMgdmVyPSIxLjAuMTMiIGRhdGU9IjEyLjAyLjIwMDIiPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3OxSDLz9LSxcvUydLP18HM09Eg0M/S1CDXINrBx8/Mz9fLwcggIkxvY2F0aW9uIiDJICJSZWZyZXNoIgotxdPMySDJ09DPzNjaz9fBzNPRIMbMwccgUEgg1yDEydLFy9TJ18UgQWNjZWxQYXNzIMkgzs/NxdLBINDP0tTP1wotxtLPztTFzsTBIMkgwtzLxc7EwSDP1MzJ3sHMydPYLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotcG9ydCB3YXMgbm90IGNvcnJlY3RlZCBpbiAiTG9jYXRpb24iIGFuZCAiUmVmcmVzaCIgaGVhZGVycwotaWYgUEggZmxhZyBpbiBBY2NlbFBhc3MgZGlyZWN0aXZlIHdhcyB1c2VkIGFuZCBmcm9udGVuZCBhbmQgYmFja2VuZAotcG9ydCBudW1iZXJzIHdlcmUgbm90IHRoZSBzYW1lLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4xMiIgZGF0ZT0iMTAuMDIuMjAwMiI+Ci0KLTxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Ci08cGFyYSBsYW5nPSJydSI+Ci3GzMHHIFBIINcgxMnSxcvUydfFIEFjY2VsUGFzcy4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLVBIIGZsYWcgd2FzIGFkZGVkIGluIEFjY2VsUGFzcyBkaXJlY3RpdmUuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPC9jaGFuZ2VzPgotCi0KLTxjaGFuZ2VzIHZlcj0iMS4wLjExIiBkYXRlPSIwMS4wMi4yMDAyIj4KLQotPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgotPHBhcmEgbGFuZz0icnUiPgot1dDSwdrEzsXOwSDEydLFy9TJ18EgQWNjZWxDb250ZW50VGFpbC4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLUFjY2VsQ29udGVudFRhaWwgZGlyZWN0aXZlIHdhcyByZW1vdmVkLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLcXTzMkg0MXSxdrB0MnT2dfBxc3B0SDT1NLPy8Eg0M/QwcTBzMEgzsEgx9LBzsnD1SDC1cbF0sEsIG1vZF9yYW5kYmFuCi3Nz8cgzsXLz9LSxcvUzs8g0M/Nxc7R1Ngg08zV3sHKzs/FIN7J08zPLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotbW9kX3JhbmRiYW4gY2FuIGluY29ycmVjdGx5IGNoYW5nZSByYW5kb20gdmFsdWUgaWYgc3RyaW5nIHRvIHJld3JpdGUKLXdhcyBvbiBidWZmZXIgZWRnZS4KLTwvcGFyYT4KLTwvY2hhbmdlPgorPGNoYW5nZXMgdmVyPSIwLjEuMCIgZGF0ZT0iMDQuMTAuMjAwNCI+CiAKIDxjaGFuZ2U+CiA8cGFyYSBsYW5nPSJydSI+Ci3zz9fNxdPUyc3P09TYINMgQXBhY2hlIDEuMy4yMy4KK/DF0tfB0SDQ1cLMyd7OzyDEz9PU1dDOwdEg18XS08nRLgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgotQXBhY2hlIDEuMy4yMyBjb21wYXRpYmlsaXR5LgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Ci08cGFyYSBsYW5nPSJydSI+Ci3F08zJINcgy8/OxsnH1dLBw8nJIEFjY2VsUGFzcyDP0MnTwc4gTG9jYXRpb24g1yDXycTFIC9wcm94aWVkLywKLdTPINDSySDawdDSz9PFIC9wcm94aWVkINfP2tfSwd3BxdTT0SDSxcTJ0sXL1CDOwSBVUkwg0yDEz8LB18zFzs7ZzQot08zc28/NIC0gL3Byb3hpZWQvLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotaWYgTG9jYXRpb24gaXMgc3BlY2lmaWVkIGluIEFjY2VsUGFzcyBhcyAvcHJveGllZC8gdGhlbgotb24gcmVxdWVzdCAvcHJveGllZCByZWRpcmVjdCBpcyByZXR1cm5lZCB0byBVUkwgd2l0aCBzbGFzaCBhZGRlZCAtIC9wcm94aWVkLy4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3OxSDXz9rX0sHdwczB09ggz9vJwsvBLCDF08zJIM7FINXEwdfBzM/T2CDTz9rEwdTYINfSxc3Fzs7ZyiDGwcrMCi3EzNEgyNLBzsXOydEg1MXMwSDawdDSz9PBIFBPU1QuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1lcnJvciB3YXMgbm90IHJldHVybmVkIGlmIFBPU1QgcmVxdWVzdCBib2R5IHRlbXBvcmFyeSBmaWxlIGNyZWF0aW9uIHdhcyBmYWlsZWQuCitUaGUgZmlyc3QgcHVibGljIHZlcnNpb24uCiA8L3BhcmE+CiA8L2NoYW5nZT4KIAogPC9jaGFuZ2VzPgogCiAKLTxjaGFuZ2VzIHZlcj0iMS4wLjEwIiBkYXRlPSIyOC4xMi4yMDAxIj4KLQotPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLcTJ0sXL1MnXwSBBY2NlbFJldmVyc2UuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1BY2NlbFJldmVyc2UgZGlyZWN0aXZlIHdhcyBhZGRlZC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KLQotPGNoYW5nZXMgdmVyPSIxLjAuOSIgZGF0ZT0iMjQuMTIuMjAwMSI+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLc7BIFNvbGFyaXMgNyDJIEZyZWVCU0QgMi54IMLPzNjbycUgz9TXxdTZINDF0sXEwdfBzMnT2CDOxSDEzyDLz87DwS4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4gICAKLWJpZyByZXBzb25zZXMgd2FzIHRydW5jYXRlZCBvbiBTb2xhcmlzIDcgYW5kIEZyZWVCU0QgMi54LgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC44IiBkYXRlPSIxOS4xMi4yMDAxIj4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgot08vP0tLFy9TJ0s/Xwc7ZIM7Fy8/Uz9LZxSDTz8/C3cXOydEgz8Igz9vJwsvByC4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLXNvbWUgZXJyb3IgbWVzc2FnZXMgd2FzIGNvcnJlY3RlZC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3F08zJIMvMycXO1CDXINrB0NLP08UgUE9TVCDPwtLZ18HMINPPxcTJzsXOycUsCi3UzyDC3MvFzsTVINDF0sXEwdfBzM/T2CDOxdDPzM7PxSDUxczPINrB0NLP08EuCi30xdDF0tggbW9kX2FjY2VsINcg1MHLz8og08nU1cHDyckgzsUg08/FxMnO0cXU09Eg0yDC3MvFzsTPzS4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLWlmIGNsaWVudCBhYm9ydGVkIGNvbm5lY3Rpb24gd2hpbGUgUE9TVAotdGhlbiBiYWNrZW5kIHJlY2VpdmVkIGluY29tcGxldGVkIHJlcXVlc3QgYm9keS4KLU5vdyBtb2RfYWNjZWwgZG9lc24ndCBjb25uZWN0IHRvIGJhY2tlbmQgaW4gdGhpcyBzaXR1YXRpb24uCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotbW9kX2FjY2VsIM7FINPPwsnSwczT0SDCxdogwsnCzMnP1MXLySBtbS4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLW1vZF9hY2NlbCBkaWQgbm90IGJ1aWxkIHdpdGhvdXQgbW0gbGlicmFyeS4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KLQotPGNoYW5nZXMgdmVyPSIxLjAuNyIgZGF0ZT0iMDYuMTIuMjAwMSI+Ci0KLTxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Ci08cGFyYSBsYW5nPSJydSI+Ci3XINPPz8Ldxc7J0SDPwiDP28nCy8HIIMTPwsHXzMXOIFVSTCwgy8/Uz9LZyiDQxdLFxMGj1NPRIMLcy8XOxNUuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1iYWNrZW5kIFVSTCB3YXMgYWRkZWQgaW4gZXJyb3IgbWVzc2FnZXMuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLdTSxdTJyiDQwdLBzcXU0iDXIMTJ0sXL1MnXxSBBY2NlbEJ1c3lMb2NrLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotdGhpcmQgcGFyYW1ldGVyIHdhcyBhZGRlZCBpbiBBY2NlbEJ1c3lMb2NrIGRpcmVjdG9yeS4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3Qz9LRxM/LINrBx9LV2svJIM3PxNXMxcogbW9kX2FjY2VsLCBtb2RfcmFuZGJhbiwgbW9kX3F1b3RlZAotySBtb2Rfc3NsIM7FINfB1sXOLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotbG9hZCBvcmRlciBvZiBtb2RfYWNjZWwsIG1vZF9yYW5kYmFuLCBtb2RfcXVvdGVkIGFuZCBtb2Rfc3NsCi1oYXMgbm8gbWVhbmluZyBub3cuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgotPHBhcmEgbGFuZz0icnUiPgotxM/CwdfMxc4g0MHSwc3F1NIgLS13aXRoLXBhdGNoINcgY29uZmlndXJlLjxici8+Ci310NLB2sTOxc7ZINDB0sHNxdTS2SAtLXdpdGhvdXQtbW9kX2NoYXJzZXQgySAtLXdpdGhvdXQtbW9kX3NzbC4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLS0td2l0aC1wYXRjaCBkaXJlY3RpdmUgd2FzIGFkZGVkIGluIGNvbmZpZ3VyZS48YnIvPgotLS13aXRob3V0LW1vZF9jaGFyc2V0IGFuZCAtLXdpdGhvdXQtbW9kX3NzbCBkaXJlY3RpdmVzIGlzIHJlbW92ZWQuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgot1czV3tvFzsnFINDP0tTBwsnM2M7P09TJLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotcG9ydGFiaWxpdHkgZW5oYW5jZW1lbnQuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPC9jaGFuZ2VzPgotCi0KLTxjaGFuZ2VzIHZlcj0iMS4wLjYiIGRhdGU9IjAyLjExLjIwMDEiPgotCi08Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgotPHBhcmEgbGFuZz0icnUiPgot188gxszBx8UgTVAgxMnSxcvUydfZIEFjY2VsUGFzcyDNz9bOzyDVy8Ha2dfB1Ngg1NzHLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotTVAgZmxhZyBvZiBBY2NlbFBhc3MgZGlyZWN0aXZlIGNhbiBoYXZlIHRhZy4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgotPHBhcmEgbGFuZz0icnUiPgot0NLJIMnT0M/M2NrP18HOyckg0NLPy9PJ0s/Xwc7J0SAoxszBxyBQKSDXIMTJ0sXL1MnXxQotUmV3cml0ZVJ1bGUgzc/E1czRIG1vZF9yZXdyaXRlIM3P1s7PIMnT0M/M2NrP18HU2CDGzMHHIE1QLgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotTVAgZmxhZyBjYW4gYmUgdXNlZCBpbiBtb2RfcmV3cml0ZSBtb2R1bGUgUmV3cml0ZVJ1bGUKLWRpcmVjdGl2ZSB3aGVuIHByb3hpbmcgaXMgc3BlY2lmaWVkIChQIGZsYWcpLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLdDSySDVy8Hawc7JySDX0sXNxc7JIMvc28nSz9fBzsnRINMg0M/Nz93YwCDEydLFy9TJ1wotQWNjZWxEZWZhdWx0RXhwaXJlIMnMySBBY2NlbExhc3RNb2RpZmllZEZhY3RvciDP1NfF1CDOxSDTz8jSwc7RzNPRCi3XIMvc2ywgxdPMySDSwdrOycPBINfPINfSxc3FzskgzcXWxNUgxtLPztTFzsTPzSDJIMLcy8XOxM/NIMLZzMEKLcLPzNjbxSDX0sXN0SDL3NvJ0s/Xwc7J0S4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLWlmIHRpbWUgdG8gY2FjaGUgaXMgc3BlY2lmaWVkIGluIEFjY2VsRGVmYXVsdEV4cGlyZSBvcgotQWNjZWxMYXN0TW9kaWZpZWRGYWN0b3IgZGlyZWN0aXZlIGFuZCB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbgotZnJvbnRlbmQgYW5kIGJhY2tlbmQgaXMgbW9yZSB0aGVuIHNwZWNpZmllZCB0aW1lIHRoZW4gYW5zd2VyCi13YXMgbm90IHNhdmVkIGluIGNhY2hlLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC41IiBkYXRlPSIxOC4xMC4yMDAxIj4KLQotPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KLTxwYXJhIGxhbmc9InJ1Ij4gICAKLcTJ0sXL1MnXwSBBY2NlbElnbm9yZUF1dGguCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1BY2NlbElnbm9yZUF1dGggZGlyZWN0aXZlIHdhcyBhZGRlZC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3Q0skgydPQz8zY2s/Xwc7JySDQ0s/L08nSz9fBzsnRICjGzMHHIFApINcgxMnSxcvUydfFCi1SZXdyaXRlUnVsZSDNz8TVzNEgbW9kX3Jld3JpdGUgzc/E1czYIG1vZF9wcm94eSDE1cLMydLP18HMCi3T1NLPy9UgwdLH1c3FztTP1y4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4gIAotbW9kX3Byb3h5IG1vZHVsZSBkdXBsaWNhdGVkIGFyZ3VtZW50IHN0cmluZyB3aGVuIHByb3hpbmcKLWlzIHNwZWNpZmllZCBpbiBtb2RfcmV3cml0ZSBtb2R1bGUgUmV3cml0ZVJ1bGUgZGlyZWN0aXZlIChQIGZsYWcpLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC40IiBkYXRlPSIxNi4xMC4yMDAxIj4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotxdPMySDC3MvFzsTP1yDOxdPLz8zYy88gySDTIM/EzsnNIMnaIM7JyCDTz8XEyc7FzsnFCi3OxSDC2czPINXT1MHOz9fMxc7PLCDUzyDJzsbP0s3Bw8nRIM/CINzUz8og0M/Q2dTLxSDXINrBzcXUy8kKLSV7YWNjZWwqfXggzsUgxM/CwdfM0czB09guCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1pZiB0aGVyZSBhcmUgc2V2ZXJhbCBiYWNrZW5kcyBhbmQgY29ubmVjdGlvbiB3aXRoIG9uZSBvZiB0aGVtCi13YXMgbm90IGVzdGFibGlzaGVkIHRoZW4gJXthY2NlbCp9eCBub3RlcyBkaWQgbm90IGNvbnRhaW4gc3RhdGUgb2YgaXQuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgot0NLJINDPzNXexc7JySDP1CDC3MvFzsTBIMLPzNjbz8fPINrBx8/Mz9fLwSDQ0s/J08jPxMnMCi1zZWdtZW50YXRpb24gZmF1bHQuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1iYWNrZW5kIGJpZyBoZWFkZXIgY2F1c2VkIHNlZ21lbnRhdGlvbiBmYXVsdC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3XIGFjY2VsLWNhY2hlbWdyIMTPwsHXzMXO2SDE18Eg08/T1M/RzsnRIC0gaW52YWxpZAotySBub19hY2NlbGVyYXRlZC4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLXR3byBzdGF0dXMgY29kZXMgLSBpbnZhbGlkIGFuZCBub19hY2NlbGVyYXRlZCB3YXMgYWRkZWQKLWluIGFjY2VsLWNhY2hlbWdyLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLcTJ0sXL1MnXwSBSZXdyaXRlUnVsZSDNz8TVzNEgbW9kX3Jld3JpdGUg0yDGzMHHz80gW1BdCi3SwcLP1MHMwSDUz8zYy88g0NLJIMnT0M/M2NrP18HOyckg1yBTU0kuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1tb2RfcmV3cml0ZSBtb2R1bGUgUmV3cml0ZVJ1bGUgZGlyZWN0aXZlIHdpdGggZmxhZyBbUF0KLXdvcmtlZCBpbiBTU0kgZW52aXJvbWVudCBvbmx5LgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4zIiBkYXRlPSIxMC4xMC4yMDAxIj4KLQotPGNoYW5nZT4KLTxwYXJhIGxhbmc9InJ1Ij4KLenazcXOxc7J0SDXIMTJ0sXL1MnXxSBBY2NlbENhY2hlQ29va2llOgot5M/CwdfMxc7ZINDB0sHNxdTSICJhbGwiLCDawdDSxd3BwN3JxSDQwdLBzcXU0tkgySDSxcfVzNHSztnFINfZ0sHWxc7J0S4KLfcgz8TOz8ogxMnSxcvUydfFIM3P1sXUIMLZ1Ngg1cvB2sHOzyDOxdPLz8zYy88g0MHSwc3F1NLP1y4KLeTJ0sXL1MnX2SDJ2iDXzM/Wxc7O2cggwszPy8/XIM7FIM/C38XEyc7RwNTT0S4KLenNxc7BIGNvb2tpZSDTz9LUydLVwNTT0SDXIMHMxsHXydTOz80g0M/S0cTLxS4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLUNoYW5nZXMgaW4gQWNjZWxDYWNoZUNvb2tpZSBkaXJlY3RpdmU6Ci0iYWxsIiBwYXJhbWV0ZXIsIHN1cHJlc3NpbmcgcGFyYW1ldGVycyBhbmQgcmVndWxhciBleHByZXNzaW9ucyB3YXMgYWRkZWQuCi1UaGVyZSBjYW4gYmUgc2V2ZXJhbCBwYXJhbWV0ZXJzIGluIG9uZSBkaXJlY3RpdmUuCi1EaXJlY3RpdmVzIGlzIG5vdCBtZXJnZWQuCi1Db29raWUgbmFtZXMgaXMgc29ydGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlPgotPHBhcmEgbGFuZz0icnUiPgot6drNxc7FzsnRINcgxMnSxcvUydfFIEFjY2VsTm9QYXNzOgot8sXH1czR0s7PxSDX2dLB1sXOycUgzc/WxdQgwtnU2CDOxd7V09TXydTFzNjOzyDLINLFx8nT1NLVLgot7cXWxNUg08nN18/Mz80gIn4iIMkg0sXH1czR0s7ZzSDX2dLB1sXOycXNIM7FIMTPzNbOzyDC2dTYINDSz8LFzMEuCi33IM/Ezs/KIMTJ0sXL1MnXxSDNz9bF1CDC2dTYINXLwdrBzs8gzsXTy8/M2MvPINDB0sHNxdTSz9cuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1DaGFuZ2VzIGluIEFjY2VsTm9QYXNzIGRpcmVjdGl2ZToKLVJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gYmUgY2FzZS1pbnNlbnNpdGl2ZS4KLVRoZXJlIHNob3VsZCBub3QgYmUgc3BhY2UgYmV0d2VlbiAifiIgc3ltYm9sIGFuZCByZWd1bGFyIGV4cHJlc3Npb24uCi1UaGVyZSBjYW4gYmUgc2V2ZXJhbCBwYXJhbWV0ZXJzIGluIG9uZSBkaXJlY3RpdmUuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPC9jaGFuZ2VzPgotCi0KLTxjaGFuZ2VzIHZlcj0iMS4wLjIiIGRhdGU9IjA0LjEwLjIwMDEiPgotCi08Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgotPHBhcmEgbGFuZz0icnUiPgotxMnSxcvUydfBIEFjY2VsQ2FjaGVDb29raWUuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1BY2NlbENhY2hlQ29va2llIGRpcmVjdGl2ZSB3YXMgYWRkZWQuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLdrBzcXUy8EgYWNjZWxfbm9jYWNoZS4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLWFjY2VsX25vY2FjaGUgbm90ZSB3YXMgYWRkZWQuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KLTxwYXJhIGxhbmc9InJ1Ij4KLc/C0sHCz9TeycsgYWNjZWwtY2FjaGVtZ3IuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1hY2NlbC1jYWNoZW1nciBoYW5kbGVyIHdhcyBhZGRlZC4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Ci08cGFyYSBsYW5nPSJydSI+Ci3Q0skg2sHQ0s/TxSDOxdPLz8zYy8nIIM7F18/a0sHT1MHA3cnIIGJ5dGVyYW5nZXMgzc/HCi3X2cTB18HU2NPRIM7F18XSztnKIM/U18XULgotPC9wYXJhPgotPHBhcmEgbGFuZz0iZW4iPgotYW5zd2VyIG1heSBiZSB3cm9uZyBpZiByZXF1ZXN0IGNvbnRhaW5zIHNldmVyYWwgbm9uLWdyb3dpbmcKLWJ5dGVyYW5nZXMuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgot2sHNxdTLwSAle2FjY2VsX3J9eCDOxSDawdDJ09nXwczB09gg1yDMz8cuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci0le2FjY2VsX3J9eCBub3RlIHdhcyBub3QgbG9nZ2VkLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KLTxwYXJhIGxhbmc9InJ1Ij4KLcXTzMkgz9TXxdQgzsXL3NvJ0tXFzdnKLCDUzyDQ0skg0NLF1sTF19LFzcXOzs/NIM/C0tnXxQot08/FxMnOxc7J0SDTIMvMycXO1M/NINPPxcTJzsXOycUg0yDC3MvFzsTPzSDOxSDawcvS2dfBzM/T2CDT0sHa1S4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLWlmIHJlc3BvbnNlIGlzIG5vdCBjYWNoYWJsZSBhbmQgY2xpZW50IHByZW1hdHVyZWx5IGNsb3NlcwotY29ubmVjdGlvbiB0aGVuIGNvbm5lY3Rpb24gdG8gYmFja2VuZCB3YXMgbm90IGNsb3NlZCBhdCBvbmNlLgotPC9wYXJhPgotPC9jaGFuZ2U+Ci0KLTwvY2hhbmdlcz4KLQotCi08Y2hhbmdlcyB2ZXI9IjEuMC4xIiBkYXRlPSIyOS4wOC4yMDAxIj4KLQotPGNoYW5nZSB0eXBlPSJidWdmaXgiPgotPHBhcmEgbGFuZz0icnUiPgotz9vJwsvBINcgYWNjZWxfcmVhZF9hbmRfY2hlY2tfd3JpdGFibGUoKSDX2drZ18HMwSDOwcfS1drL1SDOwSDQ0s/DxdPTz9IuCi08L3BhcmE+Ci08cGFyYSBsYW5nPSJlbiI+Ci1idWcgaW4gYWNjZWxfcmVhZF9hbmRfY2hlY2tfd3JpdGFibGUoKSBjYXVzZWQgaGlnaCBDUFUgdXNhZ2UuCi08L3BhcmE+Ci08L2NoYW5nZT4KLQotPC9jaGFuZ2VzPgotCi0KLTxjaGFuZ2VzIHZlcj0iMS4wLjAiIGRhdGU9IjI4LjA4LjIwMDEiPgotCi08Y2hhbmdlPgotPHBhcmEgbGFuZz0icnUiPgot8MXS18HRINfF0tPJ0S48YnIvPgot9MXT1MnSz9fBzMHT2CDOwSBBcGFjaGUgMS4zLjE0LCAxLjMuMTcsIDEuMy4xOSwgMS4zLjIwIM7BCi08bm9icj5GcmVlQlNEIDMuNCwgNC4yLjwvbm9icj4KLTwvcGFyYT4KLTxwYXJhIGxhbmc9ImVuIj4KLUZpcnN0IHJlbGVhc2UuPGJyLz4KLVRlc3RlZCB3aXRoIEFwYWNoZSAxLjMuMTQsIDEuMy4xNywgMS4zLjE5LCAxLjMuMjAgb24gRnJlZUJTRCAzLjQsIDQuMi4KLTwvcGFyYT4KLTwvY2hhbmdlPgotCi08L2NoYW5nZXM+Ci0KIDwvY2hhbmdlX2xvZz4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IDE4ZjNjY2MuLjlkOTEwODAgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtMTEsNyArMTEsOCBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2FkZF9pbmhlcml0ZWRfc29ja2V0cyhuZ3hfY3ljbGVfdCAqY3ljbGUpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfZ2V0b3B0KG5neF9tYXN0ZXJfY3R4X3QgKmN0eCwgbmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2dldG9wdChuZ3hfY3ljbGVfdCAqY3ljbGUsIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndik7CitzdGF0aWMgbmd4X2ludF90IG5neF9zYXZlX2FyZ3Yobmd4X2N5Y2xlX3QgKmN5Y2xlLCBpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YpOwogc3RhdGljIHZvaWQgKm5neF9jb3JlX21vZHVsZV9jcmVhdGVfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIGNoYXIgKm5neF9jb3JlX21vZHVsZV9pbml0X2NvbmYobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpjb25mKTsKIHN0YXRpYyBjaGFyICpuZ3hfc2V0X3VzZXIobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CkBAIC05NiwxMyArOTcsMTIgQEAKIG5neF91aW50X3QgIG5neF9tYXhfbW9kdWxlOwogCiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY2hhciAqY29uc3QgKmVudnApCiB7Ci0gICAgbmd4X2ludF90ICAgICAgICAgIGk7Ci0gICAgbmd4X2xvZ190ICAgICAgICAgKmxvZzsKLSAgICBuZ3hfY3ljbGVfdCAgICAgICAqY3ljbGUsIGluaXRfY3ljbGU7Ci0gICAgbmd4X2NvcmVfY29uZl90ICAgKmNjZjsKLSAgICBuZ3hfbWFzdGVyX2N0eF90ICAgY3R4OworICAgIG5neF9pbnRfdCAgICAgICAgIGk7CisgICAgbmd4X2xvZ190ICAgICAgICAqbG9nOworICAgIG5neF9jeWNsZV90ICAgICAgKmN5Y2xlLCBpbml0X2N5Y2xlOworICAgIG5neF9jb3JlX2NvbmZfdCAgKmNjZjsKIAogI2lmIGRlZmluZWQgX19GcmVlQlNEX18KICAgICBuZ3hfZGVidWdfaW5pdCgpOwpAQCAtMTMyLDE1ICsxMzIsMTUgQEAKICAgICBpbml0X2N5Y2xlLmxvZyA9IGxvZzsKICAgICBuZ3hfY3ljbGUgPSAmaW5pdF9jeWNsZTsKIAotICAgIG5neF9tZW16ZXJvKCZjdHgsIHNpemVvZihuZ3hfbWFzdGVyX2N0eF90KSk7Ci0gICAgY3R4LmFyZ2MgPSBhcmdjOwotICAgIGN0eC5hcmd2ID0gYXJndjsKLQogICAgIGlmICghKGluaXRfY3ljbGUucG9vbCA9IG5neF9jcmVhdGVfcG9vbCgxMDI0LCBsb2cpKSkgewogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKLSAgICBpZiAobmd4X2dldG9wdCgmY3R4LCAmaW5pdF9jeWNsZSkgPT0gTkdYX0VSUk9SKSB7CisgICAgaWYgKG5neF9nZXRvcHQoJmluaXRfY3ljbGUsIGFyZ2MsIGFyZ3YpID09IE5HWF9FUlJPUikgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAobmd4X3NhdmVfYXJndigmaW5pdF9jeWNsZSwgYXJnYywgYXJndikgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KIApAQCAtMjE5LDEwICsyMTksMTAgQEAKICNlbmRpZgogCiAgICAgaWYgKG5neF9wcm9jZXNzID09IE5HWF9QUk9DRVNTX01BU1RFUikgewotICAgICAgICBuZ3hfbWFzdGVyX3Byb2Nlc3NfY3ljbGUoY3ljbGUsICZjdHgpOworICAgICAgICBuZ3hfbWFzdGVyX3Byb2Nlc3NfY3ljbGUoY3ljbGUpOwogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgbmd4X3NpbmdsZV9wcm9jZXNzX2N5Y2xlKGN5Y2xlLCAmY3R4KTsKKyAgICAgICAgbmd4X3NpbmdsZV9wcm9jZXNzX2N5Y2xlKGN5Y2xlKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTI3Niw3ICsyNzYsNyBAQAogCiBuZ3hfcGlkX3Qgbmd4X2V4ZWNfbmV3X2JpbmFyeShuZ3hfY3ljbGVfdCAqY3ljbGUsIGNoYXIgKmNvbnN0ICphcmd2KQogewotICAgIGNoYXIgICAgICAgICAgICAgKmVudlsyXSwgKnZhciwgKnA7CisgICAgY2hhciAgICAgICAgICAgICAqZW52WzNdLCAqdmFyLCAqcDsKICAgICBuZ3hfdWludF90ICAgICAgICBpOwogICAgIG5neF9waWRfdCAgICAgICAgIHBpZDsKICAgICBuZ3hfZXhlY19jdHhfdCAgICBjdHg7CkBAIC0zMDAsNyArMzAwLDI1IEBACiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjeWNsZS0+bG9nLCAwLCAiaW5oZXJpdGVkOiAlcyIsIHZhcik7CiAKICAgICBlbnZbMF0gPSB2YXI7CisKKyNpZiAoTkdYX1NFVFBST0NUSVRMRV9VU0VTX0VOVikKKworICAgIC8qIGFsbG9jYXRlIHNwYXJlIDMwMCBieXRlcyBmb3IgdGhlIG5ldyBiaW5hcnkgcHJvY2VzcyB0aXRsZSAqLworCisgICAgZW52WzFdID0gIlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCIKKyAgICAgICAgICAgICAiWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIgorICAgICAgICAgICAgICJYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiCisgICAgICAgICAgICAgIlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCIKKyAgICAgICAgICAgICAiWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIjsKKworICAgIGVudlsyXSA9IE5VTEw7CisKKyNlbHNlCisKICAgICBlbnZbMV0gPSBOVUxMOworCisjZW5kaWYKKwogICAgIGN0eC5lbnZwID0gKGNoYXIgKmNvbnN0ICopICZlbnY7CiAKICAgICBwaWQgPSBuZ3hfZXhlY3V0ZShjeWNsZSwgJmN0eCk7CkBAIC0zMTEsMzggKzMyOSwzOCBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2dldG9wdChuZ3hfbWFzdGVyX2N0eF90ICpjdHgsIG5neF9jeWNsZV90ICpjeWNsZSkKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2dldG9wdChuZ3hfY3ljbGVfdCAqY3ljbGUsIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndikKIHsKICAgICBuZ3hfaW50X3QgIGk7CiAKLSAgICBmb3IgKGkgPSAxOyBpIDwgY3R4LT5hcmdjOyBpKyspIHsKLSAgICAgICAgaWYgKGN0eC0+YXJndltpXVswXSAhPSAnLScpIHsKKyAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisgICAgICAgIGlmIChhcmd2W2ldWzBdICE9ICctJykgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBvcHRpb246IFwiJXNcIiIsIGN0eC0+YXJndltpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIG9wdGlvbjogXCIlc1wiIiwgYXJndltpXSk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoIChjdHgtPmFyZ3ZbaV1bMV0pIHsKKyAgICAgICAgc3dpdGNoIChhcmd2W2ldWzFdKSB7CiAKICAgICAgICAgY2FzZSAndCc6CiAgICAgICAgICAgICBuZ3hfdGVzdF9jb25maWcgPSAxOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICBpZiAoY3R4LT5hcmd2W2kgKyAxXSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoYXJndltpICsgMV0gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgb3B0aW9uOiBcIiVzXCIgcmVxdWlyZXMgZmlsZSBuYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+YXJndltpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2W2ldKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjeWNsZS0+Y29uZl9maWxlLmRhdGEgPSAodV9jaGFyICopIGN0eC0+YXJndlsrK2ldOworICAgICAgICAgICAgY3ljbGUtPmNvbmZfZmlsZS5kYXRhID0gKHVfY2hhciAqKSBhcmd2WysraV07CiAgICAgICAgICAgICBjeWNsZS0+Y29uZl9maWxlLmxlbiA9IG5neF9zdHJsZW4oY3ljbGUtPmNvbmZfZmlsZS5kYXRhKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIG9wdGlvbjogXCIlc1wiIiwgY3R4LT5hcmd2W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgb3B0aW9uOiBcIiVzXCIiLCBhcmd2W2ldKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNjAsNiArMzc4LDQzIEBACiB9CiAKIAorc3RhdGljIG5neF9pbnRfdCBuZ3hfc2F2ZV9hcmd2KG5neF9jeWNsZV90ICpjeWNsZSwgaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KQoreworICAgIHNpemVfdCAgICAgbGVuOworICAgIG5neF9pbnRfdCAgaTsKKworICAgIG5neF9vc19hcmd2ID0gKGNoYXIgKiopIGFyZ3Y7CisKKyAgICBuZ3hfYXJnYyA9IGFyZ2M7CisKKyNpZiBfX0ZyZWVCU0RfXworCisgICAgbmd4X2FyZ3YgPSAoY2hhciAqKikgYXJndjsKKworI2Vsc2UKKworICAgIGlmICghKG5neF9hcmd2ID0gbmd4X2FsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSwgY3ljbGUtPmxvZykpKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworICAgICAgICBsZW4gPSBuZ3hfc3RybGVuKGFyZ3ZbaV0pICsgMTsKKworICAgICAgICBpZiAoIShuZ3hfYXJndltpXSA9IG5neF9hbGxvYyhsZW4sIGN5Y2xlLT5sb2cpKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9jcHlzdHJuKCh1X2NoYXIgKikgbmd4X2FyZ3ZbaV0sICh1X2NoYXIgKikgYXJndltpXSwgbGVuKTsKKyAgICB9CisKKyAgICBuZ3hfYXJndltpXSA9IE5VTEw7CisKKyNlbmRpZgorCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCiBzdGF0aWMgdm9pZCAqbmd4X2NvcmVfbW9kdWxlX2NyZWF0ZV9jb25mKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBuZ3hfY29yZV9jb25mX3QgICpjY2Y7CkBAIC00MDcsNiArNDYyLDcgQEAKIAogI2lmICEoV0lOMzIpCiAKKyNpZiAwCiAgICAgaWYgKGNjZi0+dXNlciA9PSAodWlkX3QpIE5HWF9DT05GX1VOU0VUKSB7CiAKICAgICAgICAgcHdkID0gZ2V0cHduYW0oIm5vYm9keSIpOwpAQCAtNDI3LDEwICs0ODMsMTEgQEAKIAogICAgICAgICBjY2YtPmdyb3VwID0gZ3JwLT5ncl9naWQ7CiAgICAgfQorI2VuZGlmCiAKICAgICBpZiAoY2NmLT5waWQubGVuID09IDApIHsKICAgICAgICAgY2NmLT5waWQubGVuID0gc2l6ZW9mKE5HWF9QSURfUEFUSCkgLSAxOwotICAgICAgICBjY2YtPnBpZC5kYXRhID0gTkdYX1BJRF9QQVRIOworICAgICAgICBjY2YtPnBpZC5kYXRhID0gKHVfY2hhciAqKSBOR1hfUElEX1BBVEg7CiAgICAgfQogCiAgICAgaWYgKG5neF9jb25mX2Z1bGxfbmFtZShjeWNsZSwgJmNjZi0+cGlkKSA9PSBOR1hfRVJST1IpIHsKQEAgLTQ3OCw3ICs1MzUsNyBAQAogICAgIHB3ZCA9IGdldHB3bmFtKChjb25zdCBjaGFyICopIHZhbHVlWzFdLmRhdGEpOwogICAgIGlmIChwd2QgPT0gTlVMTCkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRwd25hbSglcykgZmFpbGVkIiwgdmFsdWVbMV0uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0cHduYW0oXCIlc1wiKSBmYWlsZWQiLCB2YWx1ZVsxXS5kYXRhKTsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIApAQCAtNDkxLDcgKzU0OCw3IEBACiAgICAgZ3JwID0gZ2V0Z3JuYW0oKGNvbnN0IGNoYXIgKikgdmFsdWVbMl0uZGF0YSk7CiAgICAgaWYgKGdycCA9PSBOVUxMKSB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldGdybmFtKCVzKSBmYWlsZWQiLCB2YWx1ZVsxXS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRncm5hbShcIiVzXCIpIGZhaWxlZCIsIHZhbHVlWzJdLmRhdGEpOwogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCA2NmI1YzMzLi44MjU0NWU1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuMCIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuMSIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfTkVXUElEX0VYVCAgICAgIi5uZXdiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfYnVmLmMgYi9zcmMvY29yZS9uZ3hfYnVmLmMKaW5kZXggNzJiNTU4Yi4uYTUzNmMwNCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2J1Zi5jCisrKyBiL3NyYy9jb3JlL25neF9idWYuYwpAQCAtMTUyLDcgKzE1Miw4IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgICgqYnVzeSktPmJ1Zi0+cG9zID0gKCpidXN5KS0+YnVmLT5sYXN0ID0gKCpidXN5KS0+YnVmLT5zdGFydDsKKyAgICAgICAgKCpidXN5KS0+YnVmLT5wb3MgPSAoKmJ1c3kpLT5idWYtPnN0YXJ0OworICAgICAgICAoKmJ1c3kpLT5idWYtPmxhc3QgPSAoKmJ1c3kpLT5idWYtPnN0YXJ0OwogCiAgICAgICAgIHRsID0gKmJ1c3k7CiAgICAgICAgICpidXN5ID0gKCpidXN5KS0+bmV4dDsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaCBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaAppbmRleCBmYzA1MzM3Li4zYTNkYjUyIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmgKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oCkBAIC01Nyw3ICs1Nyw3IEBACiAKIAogI2RlZmluZSBOR1hfQ09ORl9PSyAgICAgICAgICBOVUxMCi0jZGVmaW5lIE5HWF9DT05GX0VSUk9SICAgICAgICh2b2lkICopIC0xCisjZGVmaW5lIE5HWF9DT05GX0VSUk9SICAgICAgIChjaGFyICopIC0xCiAKICNkZWZpbmUgTkdYX0NPTkZfQkxPQ0tfRE9ORSAgMQogI2RlZmluZSBOR1hfQ09ORl9GSUxFX0RPTkUgICAyCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwppbmRleCA2OTgzNDJmLi4xOWY1NjI5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCisrKyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKQEAgLTMxMywxOCArMzEzLDYgQEAKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjLT5sb2csIDAsICJjb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0jaWYgKE5HWF9PUEVOU1NMKQotCi0gICAgaWYgKGMtPnNzbCkgewotICAgICAgICBpZiAobmd4X3NzbF9zaHV0ZG93bihjKSA9PSBOR1hfQUdBSU4pIHsKLSAgICAgICAgICAgIGMtPnJlYWQtPmV2ZW50X2hhbmRsZXIgPSBuZ3hfc3NsX2Nsb3NlX2hhbmRsZXI7Ci0gICAgICAgICAgICBjLT53cml0ZS0+ZXZlbnRfaGFuZGxlciA9IG5neF9zc2xfY2xvc2VfaGFuZGxlcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSNlbmRpZgogCiAgICAgaWYgKGMtPnJlYWQtPnRpbWVyX3NldCkgewogICAgICAgICBuZ3hfZGVsX3RpbWVyKGMtPnJlYWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaCBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKaW5kZXggN2EwMzQ1MC4uNTdjN2EzMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAorKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCkBAIC0xMjAsNyArMTIwLDEyIEBACiAgICAgdW5zaWduZWQgICAgICAgICAgICBzaW5nbGVfY29ubmVjdGlvbjoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgdW5leHBlY3RlZF9lb2Y6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgIHRpbWVkb3V0OjE7CisKKyAgICB1bnNpZ25lZCAgICAgICAgICAgIHNlbmRmaWxlOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICBzbmRsb3dhdDoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgdGNwX25vZGVsYXk6MTsKICAgICBzaWduZWQgICAgICAgICAgICAgIHRjcF9ub3B1c2g6MjsKKwogI2lmIChIQVZFX0lPQ1ApCiAgICAgdW5zaWduZWQgICAgICAgICAgICBhY2NlcHRfY29udGV4dF91cGRhdGVkOjE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5jIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKaW5kZXggZWQ0ZDYwZi4uMzhmNGFkNSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKQEAgLTYxNSw2ICs2MTUsOSBAQAogICAgIG5neF91aW50X3QgICAgICAgIGk7CiAgICAgbmd4X2xpc3RfcGFydF90ICAqcGFydDsKICAgICBuZ3hfb3Blbl9maWxlX3QgICpmaWxlOworI2lmICEoV0lOMzIpCisgICAgbmd4X2ZpbGVfaW5mb190ICAgZmk7CisjZW5kaWYKIAogICAgIHBhcnQgPSAmY3ljbGUtPm9wZW5fZmlsZXMucGFydDsKICAgICBmaWxlID0gcGFydC0+ZWx0czsKQEAgLTY3Miw2ICs2NzUsMzUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ldLm5hbWUuZGF0YSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobmd4X2ZpbGVfaW5mbygoY29uc3QgY2hhciAqKSBmaWxlW2ldLm5hbWUuZGF0YSwgJmZpKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ZpbGVfaW5mb19uICIgXCIlc1wiIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ldLm5hbWUuZGF0YSk7CisKKyAgICAgICAgICAgICAgICBpZiAobmd4X2Nsb3NlX2ZpbGUoZmQpID09IE5HWF9GSUxFX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ldLm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGZpLnN0X21vZGUgJiAoU19JUlVTUnxTX0lXVVNSKSkgIT0gKFNfSVJVU1J8U19JV1VTUikpIHsKKworICAgICAgICAgICAgICAgIGZpLnN0X21vZGUgfD0gKFNfSVJVU1J8U19JV1VTUik7CisKKyAgICAgICAgICAgICAgICBpZiAoY2htb2QoKGNvbnN0IGNoYXIgKikgZmlsZVtpXS5uYW1lLmRhdGEsIGZpLnN0X21vZGUpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG1vZCBcIiVzXCIgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ldLm5hbWUuZGF0YSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5neF9jbG9zZV9maWxlKGZkKSA9PSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtpXS5uYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZjbnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA9PSAtMSkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jIGIvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCmluZGV4IGYwZDY2Y2IuLjc0ZTM4ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYworKysgYi9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKQEAgLTIyOCw4ICsyMjgsMTUgQEAKICAgICAgICAgc3JjLT5wb3MgKz0gc2l6ZTsKICAgICAgICAgZHN0LT5sYXN0ICs9IHNpemU7CiAKLSAgICAgICAgaWYgKHNyYy0+aW5fZmlsZSkgeworICAgICAgICBpZiAoc3JjLT5pbl9maWxlICYmIHNlbmRmaWxlKSB7CisgICAgICAgICAgICBkc3QtPmluX2ZpbGUgPSAxOworICAgICAgICAgICAgZHN0LT5maWxlID0gc3JjLT5maWxlOworICAgICAgICAgICAgZHN0LT5maWxlX3BvcyA9IHNyYy0+ZmlsZV9wb3M7CiAgICAgICAgICAgICBzcmMtPmZpbGVfcG9zICs9IHNpemU7CisgICAgICAgICAgICBkc3QtPmZpbGVfbGFzdCA9IHNyYy0+ZmlsZV9wb3M7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRzdC0+aW5fZmlsZSA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc3JjLT5sYXN0X2J1ZiAmJiBzcmMtPnBvcyA9PSBzcmMtPmxhc3QpIHsKQEAgLTI1OCwxMSArMjY1LDE4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBzcmMtPmZpbGVfcG9zICs9IG47CiAgICAgICAgIGRzdC0+bGFzdCArPSBuOwogCi0gICAgICAgIGlmICghc2VuZGZpbGUpIHsKKyAgICAgICAgaWYgKHNlbmRmaWxlKSB7CisgICAgICAgICAgICBkc3QtPmluX2ZpbGUgPSAxOworICAgICAgICAgICAgZHN0LT5maWxlID0gc3JjLT5maWxlOworICAgICAgICAgICAgZHN0LT5maWxlX3BvcyA9IHNyYy0+ZmlsZV9wb3M7CisgICAgICAgICAgICBzcmMtPmZpbGVfcG9zICs9IHNpemU7CisgICAgICAgICAgICBkc3QtPmZpbGVfbGFzdCA9IHNyYy0+ZmlsZV9wb3M7CisKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRzdC0+aW5fZmlsZSA9IDA7CisgICAgICAgICAgICBzcmMtPmZpbGVfcG9zICs9IG47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc3JjLT5sYXN0X2J1ZiAmJiBzcmMtPmZpbGVfcG9zID09IHNyYy0+ZmlsZV9sYXN0KSB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmMgYi9zcmMvY29yZS9uZ3hfcGFsbG9jLmMKaW5kZXggZWU0ZDIyNC4uZTQxZTk3MSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3BhbGxvYy5jCisrKyBiL3NyYy9jb3JlL25neF9wYWxsb2MuYwpAQCAtNzcsMTMgKzc3LDE0IEBACiAgICAgbmd4X3Bvb2xfbGFyZ2VfdCAgKmxhcmdlLCAqbGFzdDsKIAogICAgIGlmIChzaXplIDw9IChzaXplX3QpIE5HWF9NQVhfQUxMT0NfRlJPTV9QT09MCi0gICAgICAgICYmIHNpemUgPD0gKHNpemVfdCkgKHBvb2wtPmVuZCAtIChjaGFyICopIHBvb2wpIC0gc2l6ZW9mKG5neF9wb29sX3QpKQorICAgICAgICAmJiBzaXplIDw9IChzaXplX3QpIChwb29sLT5lbmQgLSAoY2hhciAqKSBwb29sKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKHNpemVfdCkgbmd4X2FsaWduKHNpemVvZihuZ3hfcG9vbF90KSkpCiAgICAgewogICAgICAgICBmb3IgKHAgPSBwb29sLCBuID0gcG9vbC0+bmV4dDsgLyogdm9pZCAqLzsgcCA9IG4sIG4gPSBuLT5uZXh0KSB7CiAgICAgICAgICAgICBtID0gbmd4X2FsaWduKHAtPmxhc3QpOwogCiAgICAgICAgICAgICBpZiAoKHNpemVfdCkgKHAtPmVuZCAtIG0pID49IHNpemUpIHsKLSAgICAgICAgICAgICAgICBwLT5sYXN0ID0gbSArIHNpemUgOworICAgICAgICAgICAgICAgIHAtPmxhc3QgPSBtICsgc2l6ZTsKIAogICAgICAgICAgICAgICAgIHJldHVybiBtOwogICAgICAgICAgICAgfQpAQCAtMTAwLDggKzEwMSw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBwLT5uZXh0ID0gbjsKLSAgICAgICAgbSA9IG4tPmxhc3Q7Ci0gICAgICAgIG4tPmxhc3QgKz0gc2l6ZTsKKyAgICAgICAgbSA9IG5neF9hbGlnbihuLT5sYXN0KTsKKyAgICAgICAgbi0+bGFzdCA9IG0gKyBzaXplOwogCiAgICAgICAgIHJldHVybiBtOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuYyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwppbmRleCAzZDZhOWViLi4zMmE0MDc5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIH0KIAogCi12b2lkIG5neF9lbmNvZGVfYmFzZTY0KG5neF9zdHJfdCAqc3JjLCBuZ3hfc3RyX3QgKmRzdCkKK3ZvaWQgbmd4X2VuY29kZV9iYXNlNjQobmd4X3N0cl90ICpkc3QsIG5neF9zdHJfdCAqc3JjKQogewogICAgIHVfY2hhciAgICAgICAgICpkLCAqczsKICAgICBzaXplX3QgICAgICAgICAgbGVuOwpAQCAtMTY4LDcgKzE2OCw3IEBACiB9CiAKIAotbmd4X2ludF90IG5neF9kZWNvZGVfYmFzZTY0KG5neF9zdHJfdCAqc3JjLCBuZ3hfc3RyX3QgKmRzdCkKK25neF9pbnRfdCBuZ3hfZGVjb2RlX2Jhc2U2NChuZ3hfc3RyX3QgKmRzdCwgbmd4X3N0cl90ICpzcmMpCiB7CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKICAgICB1X2NoYXIgICAgICAgICAqZCwgKnM7CkBAIC0yMzEsNTQgKzIzMSw1NSBAQAogfQogCiAKLSNpZiAwCi1jaGFyICpuZ3hfcHNwcmludGYobmd4X3Bvb2xfdCAqcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCituZ3hfaW50X3Qgbmd4X2VzY2FwZV91cmkodV9jaGFyICpkc3QsIHVfY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2YV9saXN0ICAgIGFyZ3M7CisgICAgbmd4X2ludF90ICAgICAgICAgbjsKKyAgICBuZ3hfdWludF90ICAgICAgICBpOworICAgIHN0YXRpYyB1X2NoYXIgICAgIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworICAgIHN0YXRpYyB1aW50MzJfdCAgIGVzY2FwZVtdID0KKyAgICAgICAgeyAweGZmZmZmZmZmLCAvKiAxMTExIDExMTEgMTExMSAxMTExICAxMTExIDExMTEgMTExMSAxMTExICovCiAKLSAgICB2YV9zdGFydChhcmdzLCBmbXQpOworICAgICAgICAgICAgICAgICAgICAgIC8qID8+PTwgOzo5OCA3NjU0IDMyMTAgIC8uLSwgKyopKCAnJiUkICMiISAgKi8KKyAgICAgICAgICAweDgwMDAwMDIxLCAvKiAxMDAwIDAwMDAgMDAwMCAwMDAwICAwMDAwIDAwMDAgMDAxMCAwMDAxICovCiAKLSAgICB3aGlsZSAoKmZtdCkgewotICAgICAgICAgc3dpdGNoKCpmbXQrKykgewotICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgc3dpdGNoKCpmbXQrKykgewotICAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgICAgICBzID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7Ci0gICAgICAgICAgICAgICAgIG4gKz0gbmd4X3N0cmxlbihzKTsKLSAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgLyogX15dXCBbWllYIFdWVVQgU1JRUCAgT05NTCBLSklIIEdGRUQgQ0JBQCAqLworICAgICAgICAgIDB4MDAwMDAwMDAsIC8qIDAwMDAgMDAwMCAwMDAwIDAwMDAgIDAwMDAgMDAwMCAwMDAwIDAwMDAgKi8KIAotICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgIH0KLSAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgbisrOwotICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIC8qICB+fXwge3p5eCB3dnV0IHNycXAgIG9ubWwga2ppaCBnZmVkIGNiYWAgKi8KKyAgICAgICAgICAweDgwMDAwMDAwLCAvKiAxMDAwIDAwMDAgMDAwMCAwMDAwICAwMDAwIDAwMDAgMDAwMCAwMDAwICovCisKKyAgICAgICAgICAweGZmZmZmZmZmLCAvKiAxMTExIDExMTEgMTExMSAxMTExICAxMTExIDExMTEgMTExMSAxMTExICovCisgICAgICAgICAgMHhmZmZmZmZmZiwgLyogMTExMSAxMTExIDExMTEgMTExMSAgMTExMSAxMTExIDExMTEgMTExMSAqLworICAgICAgICAgIDB4ZmZmZmZmZmYsIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8KKyAgICAgICAgICAweGZmZmZmZmZmICAvKiAxMTExIDExMTEgMTExMSAxMTExICAxMTExIDExMTEgMTExMSAxMTExICovIH07CisKKyAgICBpZiAoZHN0ID09IE5VTEwpIHsKKworICAgICAgICAvKiBmaW5kIHRoZSBudW1iZXIgb2YgdGhlIGNoYXJhY3RlcnMgdG8gYmUgZXNjYXBlZCAqLworCisgICAgICAgIG4gID0gMDsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZXNjYXBlWypzcmMgPj4gNV0gJiAoMSA8PCAoKnNyYyAmIDB4MWYpKSkgeworICAgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNyYysrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG47CiAgICAgfQogCi0gICAgc3RyID0gbmd4X3BhbGxvYyhwLCBuKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmIChlc2NhcGVbKnNyYyA+PiA1XSAmICgxIDw8ICgqc3JjICYgMHgxZikpKSB7CisgICAgICAgICAgICAqZHN0KysgPSAnJSc7CisgICAgICAgICAgICAqZHN0KysgPSBoZXhbKnNyYyA+PiA0XTsKKyAgICAgICAgICAgICpkc3QrKyA9IGhleFsqc3JjICYgMHhmXTsKKyAgICAgICAgICAgIHNyYysrOwogCi0gICAgdmFfc3RhcnQoYXJncywgZm10KTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgIHN3aXRjaCgqZm10KyspIHsKLSAgICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgIHN3aXRjaCgqZm10KyspIHsKLSAgICAgICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgICAgICAgcyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOwotICAgICAgICAgICAgICAgICB3aGlsZSAoc3RyW2krK10gPSBzKTsKLSAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICB9Ci0gICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgIHN0cltpXSA9ICpmbXQ7Ci0gICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBsZW4gKz0gbmd4X3ZzbnByaW50ZihlcnJzdHIgKyBsZW4sIHNpemVvZihlcnJzdHIpIC0gbGVuIC0gMSwgZm10LCBhcmdzKTsKLQotICAgIHZhX2VuZChhcmdzKTsKLQorICAgIHJldHVybiBOR1hfT0s7CiB9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuaCBiL3NyYy9jb3JlL25neF9zdHJpbmcuaAppbmRleCBmYmM4ODc1Li5lOGU2OWMwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCkBAIC02MCw2ICs2MCw3IEBACiAgKiBpY2MgbWF5IGFsc28gaW5saW5lIHNldmVyYWwgbW92J3Mgb2YgYSB6ZXJvZWQgcmVnaXN0ZXIgZm9yIHNtYWxsIGJsb2Nrcy4KICAqLwogI2RlZmluZSBuZ3hfbWVtemVybyhidWYsIG4pICAgICAgIG1lbXNldChidWYsIDAsIG4pCisjZGVmaW5lIG5neF9tZW1zZXQoYnVmLCBjLCBuKSAgICAgbWVtc2V0KGJ1ZiwgYywgbikKIAogLyogbXN2YyBhbmQgaWNjIGNvbXBpbGUgbWVtY3B5KCkgdG8gdGhlIGlubGluZSAicmVwIG1vdnMiICovCiAjZGVmaW5lIG5neF9tZW1jcHkoZHN0LCBzcmMsIG4pICAgbWVtY3B5KGRzdCwgc3JjLCBuKQpAQCAtODAsOCArODEsOSBAQAogI2RlZmluZSBuZ3hfYmFzZTY0X2VuY29kZWRfbGVuZ3RoKGxlbikgICgoKGxlbiArIDIpIC8gMykgKiA0KQogI2RlZmluZSBuZ3hfYmFzZTY0X2RlY29kZWRfbGVuZ3RoKGxlbikgICgoKGxlbiArIDMpIC8gNCkgKiAzKQogCi12b2lkIG5neF9lbmNvZGVfYmFzZTY0KG5neF9zdHJfdCAqc3JjLCBuZ3hfc3RyX3QgKmRzdCk7Ci1uZ3hfaW50X3Qgbmd4X2RlY29kZV9iYXNlNjQobmd4X3N0cl90ICpzcmMsIG5neF9zdHJfdCAqZHN0KTsKK3ZvaWQgbmd4X2VuY29kZV9iYXNlNjQobmd4X3N0cl90ICpkc3QsIG5neF9zdHJfdCAqc3JjKTsKK25neF9pbnRfdCBuZ3hfZGVjb2RlX2Jhc2U2NChuZ3hfc3RyX3QgKmRzdCwgbmd4X3N0cl90ICpzcmMpOworbmd4X2ludF90IG5neF9lc2NhcGVfdXJpKHVfY2hhciAqZHN0LCB1X2NoYXIgKnNyYywgc2l6ZV90IHNpemUpOwogCiAKICNkZWZpbmUgIG5neF9xc29ydCAgICAgICAgICAgICAgICBxc29ydApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYwppbmRleCA3ZDY4ODg0Li5lYTFkMTliIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYwpAQCAtMjAyLDEzICsyMDIsNyBAQAogI2VuZGlmCiAKICNpZiAoTkdYX1JFQURfRVZFTlQgIT0gUE9MTElOKQotICAgIGlmIChldmVudCA9PSBOR1hfUkVBRF9FVkVOVCkgewotICAgICAgICBldmVudCA9IFBPTExPVVQ7Ci0jaWYgKE5HWF9XUklURV9FVkVOVCAhPSBQT0xMT1VUKQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2ZW50ID0gUE9MTElOOwotI2VuZGlmCi0gICAgfQorICAgIGV2ZW50ID0gKGV2ZW50ID09IE5HWF9SRUFEX0VWRU5UKSA/IFBPTExJTiA6IFBPTExPVVQ7CiAjZW5kaWYKIAogI2lmIChOR1hfREVCVUcpCkBAIC0yMTgsNiArMjEyLDcgQEAKICNlbmRpZgogCiAgICAgZXYtPmFjdGl2ZSA9IDE7CisKICAgICByZXR1cm4gbmd4X2RldnBvbGxfc2V0X2V2ZW50KGV2LCBldmVudCwgMCk7CiB9CiAKQEAgLTIyOSw2ICsyMjQsMTAgQEAKIAogICAgIGMgPSBldi0+ZGF0YTsKIAorI2lmIChOR1hfUkVBRF9FVkVOVCAhPSBQT0xMSU4pCisgICAgZXZlbnQgPSAoZXZlbnQgPT0gTkdYX1JFQURfRVZFTlQpID8gUE9MTElOIDogUE9MTE9VVDsKKyNlbmRpZgorCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiZGV2cG9sbCBkZWwgZXZlbnQ6IGZkOiVkIGV2OiUwNFgiLCBjLT5mZCwgZXZlbnQpOwogCkBAIC0yNDIsMTMgKzI0MSw5IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0gICAgLyogd2UgbmVlZCB0byByZXN0b3JlIHRoZSBzZWNvbmQgZXZlbnQgaWYgaXQgZXhpc3RzICovCisgICAgLyogcmVzdG9yZSB0aGUgcGFpcmVkIGV2ZW50IGlmIGl0IGV4aXN0cyAqLwogCi0gICAgaWYgKGV2ZW50ID09IE5HWF9SRUFEX0VWRU5UKSB7Ci0gICAgICAgIGlmIChldi0+YWNjZXB0KSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX09LOwotICAgICAgICB9Ci0KKyAgICBpZiAoZXZlbnQgPT0gUE9MTElOKSB7CiAgICAgICAgIGUgPSBjLT53cml0ZTsKICAgICAgICAgZXZlbnQgPSBQT0xMT1VUOwogCkBAIC0yNTcsNyArMjUyLDcgQEAKICAgICAgICAgZXZlbnQgPSBQT0xMSU47CiAgICAgfQogCi0gICAgaWYgKGUpIHsKKyAgICBpZiAoZSAmJiBlLT5hY3RpdmUpIHsKICAgICAgICAgcmV0dXJuIG5neF9kZXZwb2xsX3NldF9ldmVudChlLCBldmVudCwgMCk7CiAgICAgfQogCkBAIC0yNzMsNyArMjY4LDcgQEAKICAgICBjID0gZXYtPmRhdGE7CiAKICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIGZkOiVkIGV2OiVkIGZsOiVkIiwgYy0+ZmQsIGV2ZW50LCBmbGFncyk7CisgICAgICAgICAgICAgICAgICAgImRldnBvbGwgZmQ6JWQgZXY6JTA0WCBmbDolMDRYIiwgYy0+ZmQsIGV2ZW50LCBmbGFncyk7CiAKICAgICBpZiAobmNoYW5nZXMgPj0gbWF4X2NoYW5nZXMpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIGV2LT5sb2csIDAsCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKaW5kZXggMjZiMmM4MS4uNzJjNWI3YyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYwpAQCAtMTMxLDEwICsxMzEsNiBAQAogewogICAgIG5neF9ydHNpZ19jb25mX3QgICpydHNjZjsKIAotICAgIGlmIChuZ3hfcG9sbF9tb2R1bGVfY3R4LmFjdGlvbnMuaW5pdChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgfQotCiAgICAgcnRzY2YgPSBuZ3hfZXZlbnRfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfcnRzaWdfbW9kdWxlKTsKIAogICAgIHNpZ2VtcHR5c2V0KCZzZXQpOwpAQCAtMTcwLDcgKzE2Niw5IEBACiAKIHN0YXRpYyB2b2lkIG5neF9ydHNpZ19kb25lKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKLSAgICBuZ3hfcG9sbF9tb2R1bGVfY3R4LmFjdGlvbnMuZG9uZShjeWNsZSk7CisgICAgbmd4X2ZyZWUob3ZlcmZsb3dfbGlzdCk7CisKKyAgICBvdmVyZmxvd19saXN0ID0gTlVMTDsKIH0KIAogCkBAIC02OTcsNyArNjk1LDcgQEAKICAgICAgICAgICAgICAgICAgKiB0aGUgbmV3IG92ZXJmbG93LgogICAgICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICogTGVhcm4gdGhlIC9wcm9jL3N5cy9rZXJuZWwvcnRzaWctbWF4IHZhbHVlIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgKiBpdCBjYW4gYmUgY2hhbmdlZCBzaXNuY2UgdGhlIGxhc3QgY2hlY2tpbmcuCisgICAgICAgICAgICAgICAgICogaXQgY2FuIGJlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2hlY2tpbmcuCiAgICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgICAgICBuYW1lWzBdID0gQ1RMX0tFUk47CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKaW5kZXggM2Q3ZTE1Yy4uNDcxOGRjZCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwpAQCAtNDYxLDYgKzQ2MSwzOSBAQAogfQogCiAKK25neF9pbnRfdCBuZ3hfc2VuZF9sb3dhdChuZ3hfY29ubmVjdGlvbl90ICpjLCBzaXplX3QgbG93YXQpCit7CisgICAgaW50ICBzbmRsb3dhdDsKKworI2lmIChIQVZFX0xPV0FUX0VWRU5UKQorCisgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9IQVZFX0tRVUVVRV9FVkVOVCkgeworICAgICAgICBjLT53cml0ZS0+YXZhaWxhYmxlID0gbG93YXQ7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisjZW5kaWYKKyAgICAKKyAgICBpZiAobG93YXQgPT0gMCB8fCBjLT5zbmRsb3dhdCkgeworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIHNuZGxvd2F0ID0gKGludCkgbG93YXQ7CisKKyAgICBpZiAoc2V0c29ja29wdChjLT5mZCwgU09MX1NPQ0tFVCwgU09fU05ETE9XQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJnNuZGxvd2F0LCBzaXplb2YoaW50KSkgPT0gLTEpCisgICAgeworICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChTT19TTkRMT1dBVCkgZmFpbGVkIik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgYy0+c25kbG93YXQgPSAxOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCiBzdGF0aWMgY2hhciAqbmd4X2V2ZW50c19ibG9jayhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIGludCAgICAgICAgICAgICAgICAgICAgbTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuaAppbmRleCA3MjM3YmQ0Li5jMTczYWRjIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5oCkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICBuZ3hfaW50X3QgICgqYWRkX2Nvbm4pKG5neF9jb25uZWN0aW9uX3QgKmMpOwogICAgIG5neF9pbnRfdCAgKCpkZWxfY29ubikobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9pbnQgZmxhZ3MpOwogCi0gICAgbmd4X2ludF90ICAoKnByb2Nlc3NfY2hhbmdlcykobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfdWludF90IHRyeSk7CisgICAgbmd4X2ludF90ICAoKnByb2Nlc3NfY2hhbmdlcykobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfdWludF90IG5vd2FpdCk7CiAgICAgbmd4X2ludF90ICAoKnByb2Nlc3NfZXZlbnRzKShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogCiAgICAgbmd4X2ludF90ICAoKmluaXQpKG5neF9jeWNsZV90ICpjeWNsZSk7CkBAIC00NzksNiArNDc5LDkgQEAKICNlbmRpZgogCiAKK25neF9pbnRfdCBuZ3hfc2VuZF9sb3dhdChuZ3hfY29ubmVjdGlvbl90ICpjLCBzaXplX3QgbG93YXQpOworCisKIC8qIHVzZWQgaW4gbmd4X2xvZ19kZWJ1Z1goKSAqLwogI2RlZmluZSBuZ3hfZXZlbnRfaWRlbnQocCkgICgobmd4X2Nvbm5lY3Rpb25fdCAqKSAocCkpLT5mZAogCkBAIC00OTcsNyArNTAwLDcgQEAKIHsKICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9DTEVBUl9FVkVOVCkgewogCi0gICAgICAgIC8qIGtxdWV1ZSAqLworICAgICAgICAvKiBrcXVldWUsIGVwb2xsICovCiAKICAgICAgICAgaWYgKCFyZXYtPmFjdGl2ZSAmJiAhcmV2LT5yZWFkeSkgewogICAgICAgICAgICAgaWYgKG5neF9hZGRfZXZlbnQocmV2LCBOR1hfUkVBRF9FVkVOVCwgTkdYX0NMRUFSX0VWRU5UKQpAQCAtNTMxLDcgKzUzNCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBhaW8sIGlvY3AsIGVwb2xsLCBydHNpZyAqLworICAgIC8qIGFpbywgaW9jcCwgcnRzaWcgKi8KIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC01NjMsMTQgKzU2NiwyNSBAQAogfQogCiAKLW5neF9pbmxpbmUgc3RhdGljIGludCBuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KG5neF9ldmVudF90ICp3ZXYsIHVfaW50IGZsYWdzKQorbmd4X2lubGluZSBzdGF0aWMgaW50IG5neF9oYW5kbGVfd3JpdGVfZXZlbnQobmd4X2V2ZW50X3QgKndldiwgc2l6ZV90IGxvd2F0KQogeworICAgIG5neF9jb25uZWN0aW9uX3QgICpjOworCisgICAgaWYgKGxvd2F0KSB7CisgICAgICAgIGMgPSB3ZXYtPmRhdGE7CisKKyAgICAgICAgaWYgKG5neF9zZW5kX2xvd2F0KGMsIGxvd2F0KSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9DTEVBUl9FVkVOVCkgewogCi0gICAgICAgIC8qIGtxdWV1ZSAqLworICAgICAgICAvKiBrcXVldWUsIGVwb2xsICovCiAKICAgICAgICAgaWYgKCF3ZXYtPmFjdGl2ZSAmJiAhd2V2LT5yZWFkeSkgewotICAgICAgICAgICAgaWYgKG5neF9hZGRfZXZlbnQod2V2LCBOR1hfV1JJVEVfRVZFTlQsIE5HWF9DTEVBUl9FVkVOVHxmbGFncykKKyAgICAgICAgICAgIGlmIChuZ3hfYWRkX2V2ZW50KHdldiwgTkdYX1dSSVRFX0VWRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0NMRUFSX0VWRU5UIHwgKGxvd2F0ID8gTkdYX0xPV0FUX0VWRU5UIDogMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTYwMiw3ICs2MTYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogYWlvLCBpb2NwLCBlcG9sbCwgcnRzaWcgKi8KKyAgICAvKiBhaW8sIGlvY3AsIHJ0c2lnICovCiAKICAgICByZXR1cm4gTkdYX09LOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwppbmRleCA4YzQ4YTdhLi4xNTFjYzQyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwpAQCAtNzIsNiArNzIsMTMgQEAKICAgICAgICAgcmV0dXJuIG47CiAgICAgfQogCisgICAgaWYgKCFTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPnNzbCkpIHsKKyAgICAgICAgaGFuZHNoYWtlID0gImluIFNTTCBoYW5kc2hha2UiOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgaGFuZHNoYWtlID0gIiI7CisgICAgfQorCiAgICAgc3NsZXJyID0gU1NMX2dldF9lcnJvcihjLT5zc2wtPnNzbCwgbik7CiAKICAgICBlcnIgPSAoc3NsZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKSA/IG5neF9lcnJubyA6IDA7CkBAIC05MSwxMyArOTgsNiBAQAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKCFTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPnNzbCkpIHsKLSAgICAgICAgaGFuZHNoYWtlID0gImluIFNTTCBoYW5kc2hha2UiOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaGFuZHNoYWtlID0gIiI7Ci0gICAgfQotCiAgICAgYy0+c3NsLT5ub19yY3Zfc2h1dCA9IDE7CiAKICAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9aRVJPX1JFVFVSTiB8fCBFUlJfcGVla19lcnJvcigpID09IDApIHsKQEAgLTI0MCw4ICsyNDAsOSBAQAogCiBzdGF0aWMgbmd4X2ludF90IG5neF9zc2xfd3JpdGUobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9jaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBpbnQgICAgICAgIG4sIHNzbGVycjsKLSAgICBuZ3hfZXJyX3QgIGVycjsKKyAgICBpbnQgICAgICAgICBuLCBzc2xlcnI7CisgICAgbmd4X2Vycl90ICAgZXJyOworICAgIGNoYXIgICAgICAgKmhhbmRzaGFrZTsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIlNTTCB0byB3cml0ZTogJWQiLCBzaXplKTsKIApAQCAtMjY1LDEzICsyNjYsMjEgQEAKICAgICB9CiAKICAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKKworICAgICAgICBpZiAoIVNTTF9pc19pbml0X2ZpbmlzaGVkKGMtPnNzbC0+c3NsKSkgeworICAgICAgICAgICAgaGFuZHNoYWtlID0gImluIFNTTCBoYW5kc2hha2UiOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBoYW5kc2hha2UgPSAiIjsKKyAgICAgICAgfQorCiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgIlNTTCB3YW50cyB0byByZWFkJXMiLCBoYW5kc2hha2UpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogI2lmIDAKICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKLSAgICB9CiAjZW5kaWYKKyAgICB9CiAKICAgICBjLT5zc2wtPm5vX3Jjdl9zaHV0ID0gMTsKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYwppbmRleCBjMTk4MmZkLi43MWZjNTAwIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYwpAQCAtNjQsOCArNjQsNyBAQAogCiAgICAgaWYgKHAtPmRvd25zdHJlYW0tPmZkICE9IC0xKSB7CiAgICAgICAgIHdldiA9IHAtPmRvd25zdHJlYW0tPndyaXRlOwotICAgICAgICB3ZXYtPmF2YWlsYWJsZSA9IHAtPnNlbmRfbG93YXQ7Ci0gICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KHdldiwgTkdYX0xPV0FUX0VWRU5UKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgaWYgKG5neF9oYW5kbGVfd3JpdGVfZXZlbnQod2V2LCBwLT5zZW5kX2xvd2F0KSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfQUJPUlQ7CiAgICAgICAgIH0KIApAQCAtMzAyLDE2ICszMDEsNDEgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLCAicGlwZSBidWYiKTsKICAgICB9CiAKLSAgICBmb3IgKGNsID0gcC0+aW47IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisgICAgZm9yIChjbCA9IHAtPmJ1c3k7IGNsOyBjbCA9IGNsLT5uZXh0KSB7CiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgYnVmIGluICIgUFRSX0ZNVCAiLCBwb3MgIiBQVFJfRk1UICIsIHNpemU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgYnVmIGJ1c3kgIiBQVFJfRk1UICIsIHBvcyAiIFBUUl9GTVQgIiwgc2l6ZTogJWQiLAogICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5zdGFydCwgY2wtPmJ1Zi0+cG9zLAogICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5sYXN0IC0gY2wtPmJ1Zi0+cG9zKTsKICAgICB9CiAKLSAgICBmb3IgKGNsID0gcC0+YnVzeTsgY2w7IGNsID0gY2wtPm5leHQpIHsKKyAgICBmb3IgKGNsID0gcC0+b3V0OyBjbDsgY2wgPSBjbC0+bmV4dCkgeworICAgICAgICBpZiAoY2wtPmJ1Zi0+aW5fZmlsZSAmJiBjbC0+YnVmLT50ZW1wb3JhcnkpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWc1KE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBvdXQgc2hhZG93ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBUUl9GTVQgIiwgcG9zICIgUFRSX0ZNVCAiLCBzaXplOiAlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTogIiBPRkZfVF9GTVQgIiwgc2l6ZTogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsIGNsLT5idWYtPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfbGFzdCAtIGNsLT5idWYtPmZpbGVfcG9zKTsKKworICAgICAgICB9IGVsc2UgaWYgKGNsLT5idWYtPmluX2ZpbGUpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBvdXQgZmlsZSAiIE9GRl9UX0ZNVCAiLCBzaXplOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfbGFzdCAtIGNsLT5idWYtPmZpbGVfcG9zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBvdXQgIiBQVFJfRk1UICIsIHBvcyAiIFBUUl9GTVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHNpemU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnN0YXJ0LCBjbC0+YnVmLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5sYXN0IC0gY2wtPmJ1Zi0+cG9zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoY2wgPSBwLT5pbjsgY2w7IGNsID0gY2wtPm5leHQpIHsKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAicGlwZSBidWYgYnVzeSAiIFBUUl9GTVQgIiwgcG9zICIgUFRSX0ZNVCAiLCBzaXplOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBpbiAiIFBUUl9GTVQgIiwgcG9zICIgUFRSX0ZNVCAiLCBzaXplOiAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnN0YXJ0LCBjbC0+YnVmLT5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3MpOwogICAgIH0KQEAgLTMzNyw3ICszNjEsOSBAQAogCiAgICAgICAgIGlmIChwLT5mcmVlX2J1ZnMpIHsKICAgICAgICAgICAgIGZvciAoY2wgPSBwLT5mcmVlX3Jhd19idWZzOyBjbDsgY2wgPSBjbC0+bmV4dCkgewotICAgICAgICAgICAgICAgIG5neF9wZnJlZShwLT5wb29sLCBjbC0+YnVmLT5zdGFydCk7IAorICAgICAgICAgICAgICAgIGlmIChjbC0+YnVmLT5zaGFkb3cgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBuZ3hfcGZyZWUocC0+cG9vbCwgY2wtPmJ1Zi0+c3RhcnQpOyAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01OTcsOCArNjIzLDExIEBACiAgICAgICAgIG5neF9jaGFpbl9hZGRfbGluayhwLT5vdXQsIHAtPmxhc3Rfb3V0LCBjbCk7CiAKICAgICAgICAgaWYgKGItPmxhc3Rfc2hhZG93KSB7Ci0gICAgICAgICAgICBiLT5zaGFkb3ctPmxhc3QgPSBiLT5zaGFkb3ctPnBvcyA9IGItPnNoYWRvdy0+c3RhcnQ7CisgICAgICAgICAgICBiLT5zaGFkb3ctPnBvcyA9IGItPnNoYWRvdy0+c3RhcnQ7CisgICAgICAgICAgICBiLT5zaGFkb3ctPmxhc3QgPSBiLT5zaGFkb3ctPnN0YXJ0OworCiAgICAgICAgICAgICBuZ3hfYWxsb2NfbGlua19hbmRfc2V0X2J1Zih0bCwgYi0+c2hhZG93LCBwLT5wb29sLCBOR1hfQUJPUlQpOworCiAgICAgICAgICAgICAqbGFzdF9mcmVlID0gdGw7CiAgICAgICAgICAgICBsYXN0X2ZyZWUgPSAmdGwtPm5leHQ7CiAgICAgICAgIH0KQEAgLTY1MCwyOCArNjc5LDI0IEBACiB7CiAgICAgbmd4X2J1Zl90ICAqYiwgKm5leHQ7CiAKLSAgICBpZiAoYnVmLT5zaGFkb3cgPT0gTlVMTCkgeworICAgIGIgPSBidWYtPnNoYWRvdzsKKworICAgIGlmIChiID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGIgPSBidWYtPnNoYWRvdzsKLQogICAgIHdoaWxlICghYi0+bGFzdF9zaGFkb3cpIHsKICAgICAgICAgbmV4dCA9IGItPnNoYWRvdzsKIAotICAgICAgICBiLT5pbl9maWxlID0gMDsKLSAgICAgICAgYi0+dGVtcF9maWxlID0gMDsKLSAgICAgICAgYi0+Zmx1c2ggPSAwOwotICAgICAgICBiLT56ZXJvY29weV9idXN5ID0gMDsKKyAgICAgICAgYi0+dGVtcG9yYXJ5ID0gMDsKKyAgICAgICAgYi0+cmVjeWNsZWQgPSAwOwogCiAgICAgICAgIGItPnNoYWRvdyA9IE5VTEw7CiAgICAgICAgIGIgPSBuZXh0OwogICAgIH0KIAotICAgIGItPmluX2ZpbGUgPSAwOwotICAgIGItPnRlbXBfZmlsZSA9IDA7Ci0gICAgYi0+Zmx1c2ggPSAwOwotICAgIGItPnplcm9jb3B5X2J1c3kgPSAwOworICAgIGItPnRlbXBvcmFyeSA9IDA7CisgICAgYi0+cmVjeWNsZWQgPSAwOwogICAgIGItPmxhc3Rfc2hhZG93ID0gMDsKIAogICAgIGItPnNoYWRvdyA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyLmMKaW5kZXggYTcxODM5YS4uMjExMjQ2MSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXIuYwpAQCAtODMsMTAgKzgzLDEyIEBACiAKICAgICAgICAgc2l6ZSArPSBuZ3hfYnVmX3NpemUoY2wtPmJ1Zik7CiAKLSAgICAgICAgbmd4X3Rlc3RfbnVsbCh0bCwgbmd4X2FsbG9jX2NoYWluX2xpbmsoci0+cG9vbCksIE5HWF9FUlJPUik7Ci0gICAgICAgIHRsLT5idWYgPSBjbC0+YnVmOwotICAgICAgICAqbGwgPSB0bDsKLSAgICAgICAgbGwgPSAmdGwtPm5leHQ7CisgICAgICAgIGlmIChjbC0+YnVmLT5mbHVzaCB8fCBuZ3hfYnVmX2luX21lbW9yeShjbC0+YnVmKSB8fCBjbC0+YnVmLT5pbl9maWxlKSB7CisgICAgICAgICAgICBuZ3hfdGVzdF9udWxsKHRsLCBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKSwgTkdYX0VSUk9SKTsKKyAgICAgICAgICAgIHRsLT5idWYgPSBjbC0+YnVmOworICAgICAgICAgICAgKmxsID0gdGw7CisgICAgICAgICAgICBsbCA9ICZ0bC0+bmV4dDsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChjbC0+bmV4dCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXIuYwppbmRleCA3MmNjYjBhLi40MDg5ZmZiIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlci5jCkBAIC0xNSw2ICsxNSw4IEBACiAgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgZW5hYmxlOwogICAgIG5neF9mbGFnX3QgICAgICAgICAgIG5vX2J1ZmZlcjsKIAorICAgIG5neF9hcnJheV90ICAgICAgICAgKnR5cGVzOyAgICAgLyogYXJyYXkgb2Ygbmd4X2h0dHBfZ3ppcF90eXBlX3QgKi8KKwogICAgIG5neF9idWZzX3QgICAgICAgICAgIGJ1ZnM7CiAKICAgICBuZ3hfdWludF90ICAgICAgICAgICBodHRwX3ZlcnNpb247CkBAIC0yNyw2ICsyOSwxMiBAQAogfSBuZ3hfaHR0cF9nemlwX2NvbmZfdDsKIAogCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgbmFtZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICBlbmFibGU7Cit9IG5neF9odHRwX2d6aXBfdHlwZV90OworCisKICNkZWZpbmUgTkdYX0hUVFBfR1pJUF9QUk9YSUVEX09GRiAgICAgICAweDAwMDIKICNkZWZpbmUgTkdYX0hUVFBfR1pJUF9QUk9YSUVEX0VYUElSRUQgICAweDAwMDQKICNkZWZpbmUgTkdYX0hUVFBfR1pJUF9QUk9YSUVEX05PX0NBQ0hFICAweDAwMDgKQEAgLTU3LDEwICs2NSw2IEBACiAgICAgdW5zaWduZWQgICAgICAgICAgICAgZmx1c2g6NDsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICByZWRvOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgZG9uZToxOwotI2lmIDAKLSAgICB1bnNpZ25lZCAgICAgICAgICAgICBwYXNzOjE7Ci0gICAgdW5zaWduZWQgICAgICAgICAgICAgYmxvY2tlZDoxOwotI2VuZGlmCiAKICAgICBzaXplX3QgICAgICAgICAgICAgICB6aW47CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgem91dDsKQEAgLTg2LDYgKzkwLDggQEAKIHN0YXRpYyB2b2lkICpuZ3hfaHR0cF9nemlwX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9nemlwX21lcmdlX2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmVudCwgdm9pZCAqY2hpbGQpOworc3RhdGljIGNoYXIgKm5neF9odHRwX2d6aXBfc2V0X3R5cGVzKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29uZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfZ3ppcF9zZXRfd2luZG93KG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9nemlwX3NldF9oYXNoKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKIApAQCAtMTM4LDYgKzE0NCwxMyBAQAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZ3ppcF9jb25mX3QsIGJ1ZnMpLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJnemlwX3R5cGVzIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfMU1PUkUsCisgICAgICBuZ3hfaHR0cF9nemlwX3NldF90eXBlcywKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIDAsCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoImd6aXBfY29tcF9sZXZlbCIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LApAQCAtMjExLDcgKzIyNCw3IEBACiAgICAgbmd4X2h0dHBfZ3ppcF9maWx0ZXJfY29tbWFuZHMsICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIG5neF9odHRwX2d6aXBfZmlsdGVyX2luaXQsICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCi0gICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBjaGlsZCAqLworICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogfTsKIAogCkBAIC0yNDcsMTUgKzI2MCwyMCBAQAogCiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2d6aXBfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICBpLCBmb3VuZDsKICAgICBuZ3hfaHR0cF9nemlwX2N0eF90ICAgKmN0eDsKICAgICBuZ3hfaHR0cF9nemlwX2NvbmZfdCAgKmNvbmY7CisgICAgbmd4X2h0dHBfZ3ppcF90eXBlX3QgICp0eXBlOwogCiAgICAgY29uZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlKTsKIAogICAgIGlmICghY29uZi0+ZW5hYmxlCi0gICAgICAgIHx8IHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9PSworICAgICAgICB8fCAoci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX09LCisgICAgICAgICAgICAmJiByLT5oZWFkZXJzX291dC5zdGF0dXMgIT0gTkdYX0hUVFBfRk9SQklEREVOCisgICAgICAgICAgICAmJiByLT5oZWFkZXJzX291dC5zdGF0dXMgIT0gTkdYX0hUVFBfTk9UX0ZPVU5EKQogICAgICAgICB8fCByLT5oZWFkZXJfb25seQogICAgICAgICB8fCByLT5odHRwX3ZlcnNpb24gPCBjb25mLT5odHRwX3ZlcnNpb24KKyAgICAgICAgfHwgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlID09IE5VTEwKICAgICAgICAgfHwgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfZW5jb2RpbmcKICAgICAgICAgICAgICYmIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfZW5jb2RpbmctPnZhbHVlLmxlbikKICAgICAgICAgfHwgci0+aGVhZGVyc19pbi5hY2NlcHRfZW5jb2RpbmcgPT0gTlVMTApAQCAtMjY3LDExICsyODUsMjEgQEAKICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKICAgICB9CiAKLSAgICAvKiBUT0RPOiAidGV4dC9odG1sIiAtPiBjdXN0b20gdHlwZXMgKi8KLSAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlCi0gICAgICAgICYmIG5neF9zdHJuY2FzZWNtcChyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsIDkpICE9IDApCi0gICAgeworCisgICAgZm91bmQgPSAwOworICAgIHR5cGUgPSBjb25mLT50eXBlcy0+ZWx0czsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjb25mLT50eXBlcy0+bmVsdHM7IGkrKykgeworICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5sZW4gPj0gdHlwZVtpXS5uYW1lLmxlbgorICAgICAgICAgICAgJiYgbmd4X3N0cm5jYXNlY21wKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVtpXS5uYW1lLmRhdGEsIHR5cGVbaV0ubmFtZS5sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmb3VuZCkgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIApAQCAtNTcyLDE1ICs2MDAsOSBAQAogICAgICAgICAgICAgICAgICAgICBjdHgtPmJ1ZnMrKzsKIAogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWYgMAotICAgICAgICAgICAgICAgICAgICBjdHgtPmJsb2NrZWQgPSAxOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotI2lmIDAKLSAgICAgICAgICAgICAgICBjdHgtPmJsb2NrZWQgPSAwOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgY3R4LT56c3RyZWFtLm5leHRfb3V0ID0gY3R4LT5vdXRfYnVmLT5wb3M7CiAgICAgICAgICAgICAgICAgY3R4LT56c3RyZWFtLmF2YWlsX291dCA9IGNvbmYtPmJ1ZnMuc2l6ZTsKICAgICAgICAgICAgIH0KQEAgLTY0NiwxMCArNjY4LDYgQEAKICAgICAgICAgICAgICAgICAqY3R4LT5sYXN0X291dCA9IGNsOwogICAgICAgICAgICAgICAgIGN0eC0+bGFzdF9vdXQgPSAmY2wtPm5leHQ7CiAKLSNpZiAwCi0gICAgICAgICAgICAgICAgY3R4LT5wYXNzID0gMTsKLSNlbmRpZgotCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTcxMiw5ICs3MzAsNiBAQAogICAgICAgICAgICAgICAgIGN0eC0+enN0cmVhbS5hdmFpbF9vdXQgPSAwOwogCiAgICAgICAgICAgICAgICAgY3R4LT5kb25lID0gMTsKLSNpZiAwCi0gICAgICAgICAgICAgICAgY3R4LT5wYXNzID0gMTsKLSNlbmRpZgogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC03MjUsNDcgKzc0MCwxMCBAQAogICAgICAgICAgICAgICAgICpjdHgtPmxhc3Rfb3V0ID0gY2w7CiAgICAgICAgICAgICAgICAgY3R4LT5sYXN0X291dCA9ICZjbC0+bmV4dDsKIAotI2lmIDAKLSAgICAgICAgICAgICAgICBjdHgtPnBhc3MgPSAxOwotI2VuZGlmCi0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0jaWYgMAotCi0gICAgICAgIC8qIE9MRCBDT0RFICovCi0KLSAgICAgICAgaWYgKGN0eC0+b3V0KSB7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wYXNzKSB7Ci0gICAgICAgICAgICAgICAgY3R4LT5wYXNzID0gMDsKLQotICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0ID09IE5HWF9BR0FJTikgewotICAgICAgICAgICAgICAgIHJldHVybiBsYXN0OwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSBpZiAoY3R4LT5idXN5LT5idWYgJiYgbmd4X2J1Zl9zaXplKGN0eC0+YnVzeS0+YnVmKSkgewotICAgICAgICAgICAgaWYgKGxhc3QgIT0gTkdYX05PTkUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgaWYgKGN0eC0+YmxvY2tlZCkgewotICAgICAgICAgICAgaWYgKGxhc3QgIT0gTkdYX05PTkUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGxhc3QgPT0gTkdYX05PTkUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX09LOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbGFzdDsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgLyogTkVXIENPREUgKi8KLQogICAgICAgICBpZiAobGFzdCA9PSBOR1hfQUdBSU4pIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CiAgICAgICAgIH0KQEAgLTc3NCw4ICs3NTIsNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQogCi0gICAgICAgIC8qKi8KLQogICAgICAgICBsYXN0ID0gbmd4X2h0dHBfbmV4dF9ib2R5X2ZpbHRlcihyLCBjdHgtPm91dCk7CiAKICAgICAgICAgLyoKQEAgLTg2Niw3ICs4NDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSBjdHgtPnppbiAvIGN0eC0+em91dCk7CiAjZW5kaWYKIAotICAgIC8qIHdlIHByZWZlciBkbyBub3QgdXNlIEZQVSAqLworICAgIC8qIHdlIHByZWZlciBkbyBub3QgdXNlIHRoZSBGUFUgKi8KIAogICAgIHppbnQgPSAobmd4X3VpbnRfdCkgKGN0eC0+emluIC8gY3R4LT56b3V0KTsKICAgICB6ZnJhYyA9IChuZ3hfdWludF90KSAoKGN0eC0+emluICogMTAwIC8gY3R4LT56b3V0KSAlIDEwMCk7CkBAIC05NDcsNiArOTIzLDggQEAKICAgICBjb25mLT5idWZzLm51bSA9IDA7CiAgICAgY29uZi0+cHJveGllZCA9IDA7CiAKKyAgICBjb25mLT50eXBlcyA9IE5VTEw7CisKICAgICAgKi8KIAogICAgIGNvbmYtPmVuYWJsZSA9IE5HWF9DT05GX1VOU0VUOwpAQCAtOTY5LDYgKzk0Nyw4IEBACiAgICAgbmd4X2h0dHBfZ3ppcF9jb25mX3QgKnByZXYgPSBwYXJlbnQ7CiAgICAgbmd4X2h0dHBfZ3ppcF9jb25mX3QgKmNvbmYgPSBjaGlsZDsKIAorICAgIG5neF9odHRwX2d6aXBfdHlwZV90ICAqdHlwZTsKKwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPmVuYWJsZSwgcHJldi0+ZW5hYmxlLCAwKTsKIAogICAgIG5neF9jb25mX21lcmdlX2J1ZnNfdmFsdWUoY29uZi0+YnVmcywgcHJldi0+YnVmcywgNCwgbmd4X3BhZ2VzaXplKTsKQEAgLTk4Niw2ICs5NjYsNzcgQEAKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5taW5fbGVuZ3RoLCBwcmV2LT5taW5fbGVuZ3RoLCAwKTsKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5ub19idWZmZXIsIHByZXYtPm5vX2J1ZmZlciwgMCk7CiAKKyAgICBpZiAoY29uZi0+dHlwZXMgPT0gTlVMTCkgeworICAgICAgICBpZiAocHJldi0+dHlwZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgY29uZi0+dHlwZXMgPSBuZ3hfYXJyYXlfY3JlYXRlKGNmLT5wb29sLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9nemlwX3R5cGVfdCkpOworICAgICAgICAgICAgaWYgKGNvbmYtPnR5cGVzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghKHR5cGUgPSBuZ3hfYXJyYXlfcHVzaChjb25mLT50eXBlcykpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0eXBlLT5uYW1lLmxlbiA9IHNpemVvZigidGV4dC9odG1sIikgLSAxOworICAgICAgICAgICAgdHlwZS0+bmFtZS5kYXRhID0gKHVfY2hhciAqKSAidGV4dC9odG1sIjsKKyAgICAgICAgICAgIHR5cGUtPmVuYWJsZSA9IDE7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbmYtPnR5cGVzID0gcHJldi0+dHlwZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7Cit9CisKKworc3RhdGljIGNoYXIgKm5neF9odHRwX2d6aXBfc2V0X3R5cGVzKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29uZikKK3sKKyAgICBuZ3hfaHR0cF9nemlwX2NvbmZfdCAqZ2NmID0gY29uZjsKKworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAqdmFsdWU7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICBpOworICAgIG5neF9odHRwX2d6aXBfdHlwZV90ICAqdHlwZTsKKworICAgIGlmIChnY2YtPnR5cGVzID09IE5VTEwpIHsKKyAgICAgICAgZ2NmLT50eXBlcyA9IG5neF9hcnJheV9jcmVhdGUoY2YtPnBvb2wsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfZ3ppcF90eXBlX3QpKTsKKyAgICAgICAgaWYgKGdjZi0+dHlwZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEodHlwZSA9IG5neF9hcnJheV9wdXNoKGdjZi0+dHlwZXMpKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgdHlwZS0+bmFtZS5sZW4gPSBzaXplb2YoInRleHQvaHRtbCIpIC0gMTsKKyAgICAgICAgdHlwZS0+bmFtZS5kYXRhID0gKHVfY2hhciAqKSAidGV4dC9odG1sIjsKKyAgICAgICAgdHlwZS0+ZW5hYmxlID0gMTsKKyAgICB9CisKKyAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOworCisgICAgZm9yIChpID0gMTsgaSA8IGNmLT5hcmdzLT5uZWx0czsgaSsrKSB7CisKKyAgICAgICAgaWYgKG5neF9zdHJjbXAodmFsdWVbaV0uZGF0YSwgInRleHQvaHRtbCIpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEodHlwZSA9IG5neF9hcnJheV9wdXNoKGdjZi0+dHlwZXMpKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgdHlwZS0+bmFtZS5sZW4gPSB2YWx1ZVtpXS5sZW47CisKKyAgICAgICAgaWYgKCEodHlwZS0+bmFtZS5kYXRhID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgdHlwZS0+bmFtZS5sZW4gKyAxKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9jcHlzdHJuKHR5cGUtPm5hbWUuZGF0YSwgdmFsdWVbaV0uZGF0YSwgdHlwZS0+bmFtZS5sZW4gKyAxKTsKKyAgICB9CisKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyLmMKaW5kZXggNmNiYWQyNi4uNWY4ZTQ1MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgICAgICAgICAgc3JjLmRhdGEgPSBzdGFydDsKICAgICAgICAgICAgIGRzdC5kYXRhID0gKHVfY2hhciAqKSBjdHgtPnVpZF9nb3Q7CiAKLSAgICAgICAgICAgIGlmIChuZ3hfZGVjb2RlX2Jhc2U2NCgmc3JjLCAmZHN0KSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfZGVjb2RlX2Jhc2U2NCgmZHN0LCAmc3JjKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgaW52YWxpZCB1c2VyaWQgY29va2llIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWVzW2ldLT52YWx1ZS5kYXRhKTsKQEAgLTM1OCw3ICszNTgsNyBAQAogICAgIHNyYy5kYXRhID0gKHVfY2hhciAqKSBjdHgtPnVpZF9zZXQ7CiAgICAgZHN0LmRhdGEgPSBwOwogCi0gICAgbmd4X2VuY29kZV9iYXNlNjQoJnNyYywgJmRzdCk7CisgICAgbmd4X2VuY29kZV9iYXNlNjQoJmRzdCwgJnNyYyk7CiAKICAgICBwICs9IGRzdC5sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKaW5kZXggM2ZhMmUwYi4uZjA3OTRmMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKQEAgLTI5LDYgKzI5LDExIEBACiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfcHJveHlfcGFyc2VfdXBzdHJlYW0obmd4X3N0cl90ICp1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfcHJveHlfdXBzdHJlYW1fY29uZl90ICp1KTsKIAorc3RhdGljIGNoYXIgKm5neF9odHRwX3Byb3h5X2xvd2F0X2NoZWNrKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKKworc3RhdGljIG5neF9jb25mX3Bvc3RfdCAgbmd4X2h0dHBfcHJveHlfbG93YXRfcG9zdCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmd4X2h0dHBfcHJveHlfbG93YXRfY2hlY2sgfSA7CisKIAogc3RhdGljIG5neF9jb25mX2JpdG1hc2tfdCAgbmV4dF91cHN0cmVhbV9tYXNrc1tdID0gewogICAgIHsgbmd4X3N0cmluZygiZXJyb3IiKSwgTkdYX0hUVFBfUFJPWFlfRlRfRVJST1IgfSwKQEAgLTc5LDYgKzg0LDEzIEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCBzZW5kX3RpbWVvdXQpLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9zZW5kX2xvd2F0IiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc2l6ZV9zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcHJveHlfbG9jX2NvbmZfdCwgc2VuZF9sb3dhdCksCisgICAgICAmbmd4X2h0dHBfcHJveHlfbG93YXRfcG9zdCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9wcmVzZXJ2ZV9ob3N0IiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCkBAIC04NzcsNiArODg5LDcgQEAKIAogICAgIGNvbmYtPmNvbm5lY3RfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgY29uZi0+c2VuZF90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKKyAgICBjb25mLT5zZW5kX2xvd2F0ID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKIAogICAgIGNvbmYtPnByZXNlcnZlX2hvc3QgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjb25mLT5zZXRfeF9yZWFsX2lwID0gTkdYX0NPTkZfVU5TRVQ7CkBAIC05MjAsNiArOTMzLDcgQEAKICAgICBuZ3hfY29uZl9tZXJnZV9tc2VjX3ZhbHVlKGNvbmYtPmNvbm5lY3RfdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPmNvbm5lY3RfdGltZW91dCwgNjAwMDApOwogICAgIG5neF9jb25mX21lcmdlX21zZWNfdmFsdWUoY29uZi0+c2VuZF90aW1lb3V0LCBwcmV2LT5zZW5kX3RpbWVvdXQsIDYwMDAwKTsKKyAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnNlbmRfbG93YXQsIHByZXYtPnNlbmRfbG93YXQsIDApOwogCiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+cHJlc2VydmVfaG9zdCwgcHJldi0+cHJlc2VydmVfaG9zdCwgMCk7CiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+c2V0X3hfcmVhbF9pcCwgcHJldi0+c2V0X3hfcmVhbF9pcCwgMCk7CkBAIC0xMDczLDE3ICsxMDg3LDIxIEBACiAgICAgdmFsdWUgPSBjZi0+YXJncy0+ZWx0czsKIAogICAgIGlmIChuZ3hfc3RybmNhc2VjbXAodmFsdWVbMV0uZGF0YSwgImh0dHA6Ly8iLCA3KSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiAiaW52YWxpZCBVUkwgcHJlZml4IjsKKyAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLCAiaW52YWxpZCBVUkwgcHJlZml4Iik7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBuZ3hfdGVzdF9udWxsKGxjZi0+dXBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3Byb3h5X3Vwc3RyZWFtX2NvbmZfdCkpLAotICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOworICAgIGxjZi0+dXBzdHJlYW0gPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3Byb3h5X3Vwc3RyZWFtX2NvbmZfdCkpOworICAgIGlmIChsY2YtPnVwc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KIAogICAgIGxjZi0+dXBzdHJlYW0tPnVybC5sZW4gPSB2YWx1ZVsxXS5sZW47CiAgICAgaWYgKCEobGNmLT51cHN0cmVhbS0+dXJsLmRhdGEgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCB2YWx1ZVsxXS5sZW4gKyAxKSkpIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KKwogICAgIG5neF9jcHlzdHJuKGxjZi0+dXBzdHJlYW0tPnVybC5kYXRhLCB2YWx1ZVsxXS5kYXRhLCB2YWx1ZVsxXS5sZW4gKyAxKTsKIAogICAgIHZhbHVlWzFdLmRhdGEgKz0gNzsKQEAgLTEwOTIsMTEgKzExMTAsMTQgQEAKICAgICBlcnIgPSBuZ3hfaHR0cF9wcm94eV9wYXJzZV91cHN0cmVhbSgmdmFsdWVbMV0sIGxjZi0+dXBzdHJlYW0pOwogCiAgICAgaWYgKGVycikgewotICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsIGVycik7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBuZ3hfdGVzdF9udWxsKGhvc3QsIG5neF9wYWxsb2MoY2YtPnBvb2wsIGxjZi0+dXBzdHJlYW0tPmhvc3QubGVuICsgMSksCi0gICAgICAgICAgICAgICAgICBOR1hfQ09ORl9FUlJPUik7CisgICAgaWYgKCEoaG9zdCA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIGxjZi0+dXBzdHJlYW0tPmhvc3QubGVuICsgMSkpKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKICAgICBuZ3hfY3B5c3Rybihob3N0LCBsY2YtPnVwc3RyZWFtLT5ob3N0LmRhdGEsIGxjZi0+dXBzdHJlYW0tPmhvc3QubGVuICsgMSk7CiAKICAgICAvKiBBRl9JTkVUIG9ubHkgKi8KQEAgLTExMTUsMTEgKzExMzYsMTIgQEAKIAogICAgICAgICAvKiBNUDogbmd4X3NoYXJlZF9wYWxsb2MoKSAqLwogCi0gICAgICAgIG5neF90ZXN0X251bGwobGNmLT5wZWVycywKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X3BlZXJzX3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzaXplb2Yobmd4X3BlZXJfdCkgKiAoaSAtIDEpKSwKLSAgICAgICAgICAgICAgICAgICAgICBOR1hfQ09ORl9FUlJPUik7CisgICAgICAgIGxjZi0+cGVlcnMgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfcGVlcnNfdCkgKyBzaXplb2Yobmd4X3BlZXJfdCkgKiAoaSAtIDEpKTsKKworICAgICAgICBpZiAobGNmLT5wZWVycyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KIAogICAgICAgICBsY2YtPnBlZXJzLT5udW1iZXIgPSBpOwogCkBAIC0xMTMwLDkgKzExNTIsMTIgQEAKICAgICAgICAgICAgIGxjZi0+cGVlcnMtPnBlZXJzW2ldLnBvcnQgPSBsY2YtPnVwc3RyZWFtLT5wb3J0OwogCiAgICAgICAgICAgICBsZW4gPSBJTkVUX0FERFJTVFJMRU4gKyBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQubGVuICsgMTsKLSAgICAgICAgICAgIG5neF90ZXN0X251bGwobGNmLT5wZWVycy0+cGVlcnNbaV0uYWRkcl9wb3J0X3RleHQuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3BhbGxvYyhjZi0+cG9vbCwgbGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOworCisgICAgICAgICAgICBsY2YtPnBlZXJzLT5wZWVyc1tpXS5hZGRyX3BvcnRfdGV4dC5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3BhbGxvYyhjZi0+cG9vbCwgbGVuKTsKKyAgICAgICAgICAgIGlmIChsY2YtPnBlZXJzLT5wZWVyc1tpXS5hZGRyX3BvcnRfdGV4dC5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxlbiA9IG5neF9pbmV0X250b3AoQUZfSU5FVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxjZi0+cGVlcnMtPnBlZXJzW2ldLmFkZHIsCkBAIC0xMTUzLDggKzExNzgsOSBAQAogCiAgICAgICAgIC8qIE1QOiBuZ3hfc2hhcmVkX3BhbGxvYygpICovCiAKLSAgICAgICAgbmd4X3Rlc3RfbnVsbChsY2YtPnBlZXJzLCBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKG5neF9wZWVyc190KSksCi0gICAgICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOworICAgICAgICBpZiAoIShsY2YtPnBlZXJzID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfcGVlcnNfdCkpKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CiAKICAgICAgICAgbGNmLT5wZWVycy0+bnVtYmVyID0gMTsKIApAQCAtMTE2NSw5ICsxMTkxLDExIEBACiAKICAgICAgICAgbGVuID0gbGNmLT51cHN0cmVhbS0+aG9zdC5sZW4gKyBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQubGVuICsgMTsKIAotICAgICAgICBuZ3hfdGVzdF9udWxsKGxjZi0+cGVlcnMtPnBlZXJzWzBdLmFkZHJfcG9ydF90ZXh0LmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgbmd4X3BhbGxvYyhjZi0+cG9vbCwgbGVuICsgMSksCi0gICAgICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOworICAgICAgICBsY2YtPnBlZXJzLT5wZWVyc1swXS5hZGRyX3BvcnRfdGV4dC5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcGFsbG9jKGNmLT5wb29sLCBsZW4gKyAxKTsKKyAgICAgICAgaWYgKGxjZi0+cGVlcnMtPnBlZXJzWzBdLmFkZHJfcG9ydF90ZXh0LmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CiAKICAgICAgICAgbGVuID0gbGNmLT51cHN0cmVhbS0+aG9zdC5sZW47CiAKQEAgLTEyNzgsMyArMTMwNiwzNCBAQAogCiAgICAgcmV0dXJuICJpbnZhbGlkIHBvcnQgaW4gdXBzdHJlYW0gVVJMIjsKIH0KKworCitzdGF0aWMgY2hhciAqbmd4X2h0dHBfcHJveHlfbG93YXRfY2hlY2sobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBvc3QsIHZvaWQgKmRhdGEpCit7CisjaWYgX19GcmVlQlNEX18KKworICAgIHNzaXplX3QgKm5wID0gZGF0YTsKKworICAgIGlmICgqbnAgPj0gbmd4X2ZyZWVic2RfbmV0X2luZXRfdGNwX3NlbmRzcGFjZSkgeworICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJwcm94eV9zZW5kX2xvd2F0XCIgbXVzdCBiZSBsZXNzIHRoYW4gJWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzeXNjdGwgbmV0LmluZXQudGNwLnNlbmRzcGFjZSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ZyZWVic2RfbmV0X2luZXRfdGNwX3NlbmRzcGFjZSk7CisKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworCisjZWxzZQorCisjaWYgMAorICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiXCJwcm94eV9zZW5kX2xvd2F0XCIgaXMgbm90IHN1cHBvcnRlZCwgaWdub3JlZCIpOworCisgICAgKm5wID0gMDsKKyNlbmRpZgorCisjZW5kaWYKKworICAgIHJldHVybiBOR1hfQ09ORl9PSzsKK30KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5oIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKaW5kZXggNGRjYzY1My4uNzI4MjU5YyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKQEAgLTU0LDYgKzU0LDcgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9sb3dhdDsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfYnVmZmVyX3NpemU7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzeV9idWZmZXJzX3NpemU7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3RlbXBfZmlsZV9zaXplOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oZWFkZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGVhZGVyLmMKaW5kZXggMDM4MDAxMi4uMDc3MjJmYyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oZWFkZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hlYWRlci5jCkBAIC0xNjQsMjQgKzE2NCwyNiBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIC8qCi0gICAgICogd2UgZG8gbm90IHNldCByLT5oZWFkZXJzX291dC5sb2NhdGlvbiB0byBhdm9pZCB0aGUgaGFuZGxpbmcKLSAgICAgKiB0aGUgbG9jYWwgcmVkaXJlY3RzIHdpdGhvdXQgYSBob3N0IG5hbWUgYnkgbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcigpCi0gICAgICovCi0KLSNpZiAwCi0gICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24gPSBsb2NhdGlvbjsKLSNlbmRpZgotCiAgICAgaWYgKHVjLT51cmwubGVuID4gbG9jLT52YWx1ZS5sZW4KICAgICAgICAgfHwgbmd4X3JzdHJuY21wKGxvYy0+dmFsdWUuZGF0YSwgdWMtPnVybC5kYXRhLCB1Yy0+dXJsLmxlbikgIT0gMCkKICAgICB7CisKKyAgICAgICAvKgorICAgICAgICAqIHdlIGRvIG5vdCBzZXQgci0+aGVhZGVyc19vdXQubG9jYXRpb24gaGVyZSB0byBhdm9pZCB0aGUgaGFuZGxpbmcKKyAgICAgICAgKiB0aGUgbG9jYWwgcmVkaXJlY3RzIHdpdGhvdXQgYSBob3N0IG5hbWUgYnkgbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcigpCisgICAgICAgICovCisKICAgICAgICAgKmxvY2F0aW9uID0gKmxvYzsKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKICAgICAvKiBUT0RPOiBwcm94eV9yZXZlcnNlICovCiAKKyAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbiA9IGxvY2F0aW9uOworCisgICAgbG9jYXRpb24tPmtleS5sZW4gPSAwOworICAgIGxvY2F0aW9uLT5rZXkuZGF0YSA9IE5VTEw7CisKICAgICBsb2NhdGlvbi0+dmFsdWUubGVuID0gdWMtPmxvY2F0aW9uLT5sZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGxvYy0+dmFsdWUubGVuIC0gdWMtPnVybC5sZW4pICsgMTsKICAgICBpZiAoIShsb2NhdGlvbi0+dmFsdWUuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgbG9jYXRpb24tPnZhbHVlLmxlbikpKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3BhcnNlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3BhcnNlLmMKaW5kZXggMzcxOGFiMC4uYzEwY2Y0OSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9wYXJzZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfcGFyc2UuYwpAQCAtMTU1LDYgKzE1NSw5IEBACiAgICAgICAgICAgICBjYXNlICcgJzoKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3N0YXR1c190ZXh0OwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnLic6ICAgICAgICAgICAgICAgICAgICAvKiBJSVMgbWF5IHNlbmQgNDAzLjEsIDQwMy4yLCBldGMgKi8KKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3N0YXR1c190ZXh0OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDUjoKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X2FsbW9zdF9kb25lOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV91cHN0cmVhbS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV91cHN0cmVhbS5jCmluZGV4IGMxYThmYjYuLmJlNWQ2OWEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3Vwc3RyZWFtLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogc3RhdGljIG5neF9jaGFpbl90ICpuZ3hfaHR0cF9wcm94eV9jcmVhdGVfcmVxdWVzdChuZ3hfaHR0cF9wcm94eV9jdHhfdCAqcCkKIHsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW47CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgICAgIGk7CiAgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgICAgICAgICAqYjsKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAgICpjaGFpbjsKQEAgLTEzMywxNCArMTM0LDIwIEBACiAgICAgICAgIGxlbiA9IHItPm1ldGhvZF9uYW1lLmxlbjsKICAgICB9CiAKKyAgICBpZiAoci0+cXVvdGVkX3VyaSkgeworICAgICAgICBlc2NhcGUgPSAyICogbmd4X2VzY2FwZV91cmkoTlVMTCwgci0+dXJpLmRhdGEgKyB1Yy0+bG9jYXRpb24tPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXNjYXBlID0gMDsKKyAgICB9CisKICAgICBsZW4gKz0gdWMtPnVyaS5sZW4KLSAgICAgICAgICAgKyByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4KKyAgICAgICAgICAgKyByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGUKICAgICAgICAgICAgKyAxICsgci0+YXJncy5sZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxIGlzIGZvciAiPyIgKi8KICAgICAgICAgICAgKyBzaXplb2YoaHR0cF92ZXJzaW9uKSAtIDEKICAgICAgICAgICAgKyBzaXplb2YoY29ubmVjdGlvbl9jbG9zZV9oZWFkZXIpIC0gMQogICAgICAgICAgICArIDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgaXMgZm9yICJcclxuIiBhdCB0aGUgaGVhZGVyIGVuZCAqLwogCi0KICAgICBpZiAocC0+bGNmLT5wcmVzZXJ2ZV9ob3N0ICYmIHItPmhlYWRlcnNfaW4uaG9zdCkgewogICAgICAgICBsZW4gKz0gc2l6ZW9mKGhvc3RfaGVhZGVyKSAtIDEKICAgICAgICAgICAgICAgICsgci0+aGVhZGVyc19pbi5ob3N0X25hbWVfbGVuCkBAIC0yMTgsOSArMjI1LDE2IEBACiAKICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCB1Yy0+dXJpLmRhdGEsIHVjLT51cmkubGVuKTsKIAotICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmRhdGEgKyB1Yy0+bG9jYXRpb24tPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4pOworICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgbmd4X2VzY2FwZV91cmkoYi0+bGFzdCwgci0+dXJpLmRhdGEgKyB1Yy0+bG9jYXRpb24tPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuKTsKKyAgICAgICAgYi0+bGFzdCArPSByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGU7CisKKyAgICB9IGVsc2UgeworICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkuZGF0YSArIHVjLT5sb2NhdGlvbi0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4pOworICAgIH0KIAogICAgIGlmIChyLT5hcmdzLmxlbiA+IDApIHsKICAgICAgICAgKihiLT5sYXN0KyspID0gJz8nOwpAQCAtNDIyLDcgKzQzNiw3IEBACiAKICAgICBwLT51cHN0cmVhbS0+b3V0cHV0X2NoYWluX2N0eCA9IG91dHB1dDsKIAotICAgIG91dHB1dC0+c2VuZGZpbGUgPSByLT5zZW5kZmlsZTsKKyAgICBvdXRwdXQtPnNlbmRmaWxlID0gci0+Y29ubmVjdGlvbi0+c2VuZGZpbGU7CiAgICAgb3V0cHV0LT5wb29sID0gci0+cG9vbDsKICAgICBvdXRwdXQtPmJ1ZnMubnVtID0gMTsKICAgICBvdXRwdXQtPnRhZyA9IChuZ3hfYnVmX3RhZ190KSAmbmd4X2h0dHBfcHJveHlfbW9kdWxlOwpAQCAtNzM3LDggKzc1MSw3IEBACiAgICAgaWYgKHJjID09IE5HWF9BR0FJTikgewogICAgICAgICBuZ3hfYWRkX3RpbWVyKGMtPndyaXRlLCBwLT5sY2YtPnNlbmRfdGltZW91dCk7CiAKLSAgICAgICAgYy0+d3JpdGUtPmF2YWlsYWJsZSA9IC8qIFNUVUI6IGxvd2F0ICovIDA7Ci0gICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KGMtPndyaXRlLCBOR1hfTE9XQVRfRVZFTlQpID09IE5HWF9FUlJPUikgeworICAgICAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudChjLT53cml0ZSwgcC0+bGNmLT5zZW5kX2xvd2F0KSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIG5neF9odHRwX3Byb3h5X2ZpbmFsaXplX3JlcXVlc3QocCwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTE3Miw2ICsxMTg1LDcgQEAKICAgICByID0gcC0+cmVxdWVzdDsKIAogICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IHAtPnVwc3RyZWFtLT5zdGF0dXM7CisgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzX2xpbmUgPSBwLT51cHN0cmVhbS0+c3RhdHVzX2xpbmU7CiAKICNpZiAwCiAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IC0xOwpAQCAtMTI5OCwxMSArMTMxMiwxMCBAQAogICAgICAgICAgKi8KIAogICAgICAgICBlcC0+Y3ljbGljX3RlbXBfZmlsZSA9IDE7Ci0gICAgICAgIHItPnNlbmRmaWxlID0gMDsKKyAgICAgICAgci0+Y29ubmVjdGlvbi0+c2VuZGZpbGUgPSAwOwogCiAgICAgfSBlbHNlIHsKICAgICAgICAgZXAtPmN5Y2xpY190ZW1wX2ZpbGUgPSAwOwotICAgICAgICByLT5zZW5kZmlsZSA9IDE7CiAgICAgfQogCiAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29weV9maWx0ZXIuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcHlfZmlsdGVyLmMKaW5kZXggZDAxNWMyMS4uMTBjNTc0ZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29weV9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3B5X2ZpbHRlci5jCkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgIG5neF9odHRwX2NyZWF0ZV9jdHgociwgY3R4LCBuZ3hfaHR0cF9jb3B5X2ZpbHRlcl9tb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9vdXRwdXRfY2hhaW5fY3R4X3QpLCBOR1hfRVJST1IpOwogCi0gICAgICAgIGN0eC0+c2VuZGZpbGUgPSByLT5zZW5kZmlsZTsKKyAgICAgICAgY3R4LT5zZW5kZmlsZSA9IHItPmNvbm5lY3Rpb24tPnNlbmRmaWxlOwogICAgICAgICBjdHgtPm5lZWRfaW5fbWVtb3J5ID0gci0+ZmlsdGVyX25lZWRfaW5fbWVtb3J5OwogICAgICAgICBjdHgtPm5lZWRfaW5fdGVtcCA9IHItPmZpbHRlcl9uZWVkX3RlbXBvcmFyeTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKaW5kZXggNmRmNmVkZi4uNTgwMjFlOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCkBAIC0yMDQsNiArMjA0LDEzIEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QsIHRjcF9ub3B1c2gpLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJ0Y3Bfbm9kZWxheSIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX0ZMQUcsCisgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfY29yZV9sb2NfY29uZl90LCB0Y3Bfbm9kZWxheSksCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoInNlbmRfdGltZW91dCIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X21zZWNfc2xvdCwKQEAgLTUwNSwxMSArNTEyLDExIEBACiAgICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+bG9nX2xldmVsID0gY2xjZi0+ZXJyX2xvZy0+bG9nX2xldmVsOwogICAgIH0KIAotICAgIGlmICghKG5neF9pby5mbGFncyAmIE5HWF9JT19TRU5ERklMRSkgfHwgIWNsY2YtPnNlbmRmaWxlKSB7Ci0gICAgICAgIHItPnNlbmRmaWxlID0gMDsKKyAgICBpZiAoKG5neF9pby5mbGFncyAmIE5HWF9JT19TRU5ERklMRSkgJiYgY2xjZi0+c2VuZGZpbGUpIHsKKyAgICAgICAgci0+Y29ubmVjdGlvbi0+c2VuZGZpbGUgPSAxOwogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgci0+c2VuZGZpbGUgPSAxOworICAgICAgICByLT5jb25uZWN0aW9uLT5zZW5kZmlsZSA9IDA7CiAgICAgfQogCiAgICAgaWYgKCFjbGNmLT50Y3Bfbm9wdXNoKSB7CkBAIC0xMzg3LDYgKzEzOTQsNyBAQAogICAgIGxjZi0+Y2xpZW50X2JvZHlfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgbGNmLT5zZW5kZmlsZSA9IE5HWF9DT05GX1VOU0VUOwogICAgIGxjZi0+dGNwX25vcHVzaCA9IE5HWF9DT05GX1VOU0VUOworICAgIGxjZi0+dGNwX25vZGVsYXkgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBsY2YtPnNlbmRfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgbGNmLT5zZW5kX2xvd2F0ID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKICAgICBsY2YtPnBvc3Rwb25lX291dHB1dCA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CkBAIC0xNDc3LDYgKzE0ODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+Y2xpZW50X2JvZHlfdGltZW91dCwgNjAwMDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnNlbmRmaWxlLCBwcmV2LT5zZW5kZmlsZSwgMCk7CiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dGNwX25vcHVzaCwgcHJldi0+dGNwX25vcHVzaCwgMCk7CisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dGNwX25vZGVsYXksIHByZXYtPnRjcF9ub2RlbGF5LCAwKTsKICAgICBuZ3hfY29uZl9tZXJnZV9tc2VjX3ZhbHVlKGNvbmYtPnNlbmRfdGltZW91dCwgcHJldi0+c2VuZF90aW1lb3V0LCA2MDAwMCk7CiAgICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT5zZW5kX2xvd2F0LCBwcmV2LT5zZW5kX2xvd2F0LCAwKTsKICAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnBvc3Rwb25lX291dHB1dCwgcHJldi0+cG9zdHBvbmVfb3V0cHV0LApAQCAtMTc5NSwxMCArMTgwNCwxMCBAQAogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfbG93YXRfY2hlY2sobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBvc3QsIHZvaWQgKmRhdGEpCiB7Ci0jaWYgKEhBVkVfTE9XQVRfRVZFTlQpCi0KICAgICBzc2l6ZV90ICpucCA9IGRhdGE7CiAKKyNpZiBfX0ZyZWVCU0RfXworCiAgICAgaWYgKCpucCA+PSBuZ3hfZnJlZWJzZF9uZXRfaW5ldF90Y3Bfc2VuZHNwYWNlKSB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcInNlbmRfbG93YXRcIiBtdXN0IGJlIGxlc3MgdGhhbiAlZCAiCkBAIC0xODA4LDExICsxODE3LDEzIEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSNlbHNlCisjZWxpZiAhKEhBVkVfU09fU05ETE9XQVQpCiAKICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19XQVJOLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIlwic2VuZF9sb3dhdFwiIGlzIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZWQiKTsKIAorICAgICpucCA9IDA7CisKICNlbmRpZgogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaCBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKaW5kZXggNzQ2OGRiNS4uNzg3ZjhiOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCkBAIC0xNzIsNiArMTcyLDcgQEAKIAogICAgIG5neF9mbGFnX3QgICAgc2VuZGZpbGU7ICAgICAgICAgICAgICAgIC8qIHNlbmRmaWxlICovCiAgICAgbmd4X2ZsYWdfdCAgICB0Y3Bfbm9wdXNoOyAgICAgICAgICAgICAgLyogdGNwX25vcHVzaCAqLworICAgIG5neF9mbGFnX3QgICAgdGNwX25vZGVsYXk7ICAgICAgICAgICAgIC8qIHRjcF9ub2RlbGF5ICovCiAgICAgbmd4X2ZsYWdfdCAgICByZXNldF90aW1lZG91dF9jb25uZWN0aW9uOyAvKiByZXNldF90aW1lZG91dF9jb25uZWN0aW9uICovCiAgICAgbmd4X2ZsYWdfdCAgICBtc2llX3BhZGRpbmc7ICAgICAgICAgICAgLyogbXNpZV9wYWRkaW5nICovCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYwppbmRleCA5ODc2YTA1Li41YjdmM2ViIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlci5jCkBAIC0xNTAsNiArMTUwLDcgQEAKICAgICBsZW4gPSBzaXplb2YoIkhUVFAvMS54ICIpIC0gMSArIDIgKyAyOwogCiAgICAgLyogc3RhdHVzIGxpbmUgKi8KKwogICAgIGlmIChyLT5oZWFkZXJzX291dC5zdGF0dXNfbGluZS5sZW4pIHsKICAgICAgICAgbGVuICs9IHItPmhlYWRlcnNfb3V0LnN0YXR1c19saW5lLmxlbjsKICNpZiAoTkdYX1NVUFBSRVNTX1dBUk4pCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYwppbmRleCBiYTc3ZmZiLi5lNzBhNmVhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKQEAgLTIxNywxMCArMjE3LDEzIEBACiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19odHRwXzA5OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAgICBjYXNlICclJzoKICAgICAgICAgICAgICAgICByLT5jb21wbGV4X3VyaSA9IDE7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd191cmk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgICAgICByLT5xdW90ZWRfdXJpID0gMTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3VyaTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgICAgICAgIHItPmNvbXBsZXhfdXJpID0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI1OSw3ICsyNjIsNyBAQAogICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfYWZ0ZXJfc2xhc2hfaW5fdXJpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgci0+Y29tcGxleF91cmkgPSAxOworICAgICAgICAgICAgICAgIHItPnF1b3RlZF91cmkgPSAxOwogICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfdXJpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnPyc6CkBAIC01MjIsNyArNTI1LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLyogSUlTIGNhbiBzZW5kIGR1cGxpY2F0ZSAiSFRUUC8xLjEgLi4uIiBsaW5lcyAqLworICAgICAgICAgICAgLyogSUlTIG1heSBzZW5kIHRoZSBkdXBsaWNhdGUgIkhUVFAvMS4xIC4uLiIgbGluZXMgKi8KICAgICAgICAgICAgIGlmIChjaCA9PSAnLycKICAgICAgICAgICAgICAgICAmJiByLT5wcm94eQogICAgICAgICAgICAgICAgICYmIHAgLSByLT5oZWFkZXJfc3RhcnQgPT0gNQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IGU4ODk0NDkuLjYwNjk4NDcgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHItPmNvbXBsZXhfdXJpKSB7CisgICAgICAgICAgICBpZiAoci0+Y29tcGxleF91cmkgfHwgci0+cXVvdGVkX3VyaSkgewogICAgICAgICAgICAgICAgIHJjID0gbmd4X2h0dHBfcGFyc2VfY29tcGxleF91cmkocik7CiAKICAgICAgICAgICAgICAgICBpZiAocmMgPT0gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKSB7CkBAIC0xMzE4LDggKzEzMTgsNyBAQAogICAgICAgICBuZ3hfYWRkX3RpbWVyKHdldiwgY2xjZi0+c2VuZF90aW1lb3V0KTsKICAgICB9CiAKLSAgICB3ZXYtPmF2YWlsYWJsZSA9IGNsY2YtPnNlbmRfbG93YXQ7Ci0gICAgaWYgKG5neF9oYW5kbGVfd3JpdGVfZXZlbnQod2V2LCBOR1hfTE9XQVRfRVZFTlQpID09IE5HWF9FUlJPUikgeworICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KHdldiwgY2xjZi0+c2VuZF9sb3dhdCkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgMCk7CiAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oci0+Y29ubmVjdGlvbik7CiAgICAgfQpAQCAtMTM1NCw5ICsxMzUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKICAgICAgICAgICAgIG5neF9hZGRfdGltZXIod2V2LCBjbGNmLT5zZW5kX3RpbWVvdXQpOwogCi0gICAgICAgICAgICB3ZXYtPmF2YWlsYWJsZSA9IGNsY2YtPnNlbmRfbG93YXQ7Ci0KLSAgICAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KHdldiwgTkdYX0xPV0FUX0VWRU5UKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KHdldiwgY2xjZi0+c2VuZF9sb3dhdCkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKHItPmNvbm5lY3Rpb24pOwogICAgICAgICAgICAgfQpAQCAtMTM3MSw5ICsxMzY4LDggQEAKIAogICAgICAgICAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYoci0+bWFpbiA/IHItPm1haW4gOiByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwotICAgICAgICAgICAgd2V2LT5hdmFpbGFibGUgPSBjbGNmLT5zZW5kX2xvd2F0OwogCi0gICAgICAgICAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudCh3ZXYsIE5HWF9MT1dBVF9FVkVOVCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudCh3ZXYsIGNsY2YtPnNlbmRfbG93YXQpID09IE5HWF9FUlJPUikgewogICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgMCk7CiAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihyLT5jb25uZWN0aW9uKTsKICAgICAgICAgICAgIH0KQEAgLTEzOTQsOSArMTM5MCw3IEBACiAgICAgICAgICAgICBuZ3hfYWRkX3RpbWVyKHdldiwgY2xjZi0+c2VuZF90aW1lb3V0KTsKICAgICAgICAgfQogCi0gICAgICAgIHdldi0+YXZhaWxhYmxlID0gY2xjZi0+c2VuZF9sb3dhdDsKLQotICAgICAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudCh3ZXYsIE5HWF9MT1dBVF9FVkVOVCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KHdldiwgY2xjZi0+c2VuZF9sb3dhdCkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIDApOwogICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihyLT5jb25uZWN0aW9uKTsKICAgICAgICAgfQpAQCAtMTU0MSw2ICsxNTM1LDcgQEAKIAogc3RhdGljIHZvaWQgbmd4X2h0dHBfc2V0X2tlZXBhbGl2ZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgdGNwX25vZGVsYXk7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgaTsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICpiLCAqZjsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAgICAgICAgICpyZXYsICp3ZXY7CkBAIC0xNjg0LDcgKzE2NzksMjYgQEAKICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjLT50Y3Bfbm9wdXNoID0gTkdYX1RDUF9OT1BVU0hfVU5TRVQ7CisKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY2xjZi0+dGNwX25vZGVsYXkgJiYgIWMtPnRjcF9ub2RlbGF5KSB7CisgICAgICAgICAgICB0Y3Bfbm9kZWxheSA9IDE7CisKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLCAidGNwX25vZGVsYXkiKTsKKworICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoYy0+ZmQsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmdGNwX25vZGVsYXksIHNpemVvZihpbnQpKSA9PSAtMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFRDUF9OT0RFTEFZKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYy0+dGNwX25vZGVsYXkgPSAxOworICAgICAgICB9CiAgICAgfQogCiAjaWYgMApAQCAtMjA1NSw2ICsyMDY5LDE4IEBACiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgImNsb3NlIGh0dHAgY29ubmVjdGlvbjogJWQiLCBjLT5mZCk7CiAKKyNpZiAoTkdYX09QRU5TU0wpCisKKyAgICBpZiAoYy0+c3NsKSB7CisgICAgICAgIGlmIChuZ3hfc3NsX3NodXRkb3duKGMpID09IE5HWF9BR0FJTikgeworICAgICAgICAgICAgYy0+cmVhZC0+ZXZlbnRfaGFuZGxlciA9IG5neF9zc2xfY2xvc2VfaGFuZGxlcjsKKyAgICAgICAgICAgIGMtPndyaXRlLT5ldmVudF9oYW5kbGVyID0gbmd4X3NzbF9jbG9zZV9oYW5kbGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKwogI2lmIChOR1hfU1RBVF9TVFVCKQogICAgICgqbmd4X3N0YXRfYWN0aXZlKS0tOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKaW5kZXggZWYxNjlmNS4uMDIyYjhhOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaApAQCAtMzA3LDggKzMwNywxMCBAQAogICAgIC8qIFVSSSBpcyBub3Qgc3RhcnRlZCB3aXRoICcvJyAtICJHRVQgaHR0cDovLyIgKi8KICAgICB1bnNpZ25lZCAgICAgICAgICAgICB1bnVzdWFsX3VyaToxOwogI2VuZGlmCi0gICAgLyogVVJJIHdpdGggIi8uIiwgIiUiIGFuZCBvbiBXaW4zMiB3aXRoICIvLyIgKi8KKyAgICAvKiBVUkkgd2l0aCAiLy4iIGFuZCBvbiBXaW4zMiB3aXRoICIvLyIgKi8KICAgICB1bnNpZ25lZCAgICAgICAgICAgICBjb21wbGV4X3VyaToxOworICAgIC8qIFVSSSB3aXRoICIlIiAqLworICAgIHVuc2lnbmVkICAgICAgICAgICAgIHF1b3RlZF91cmk6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICBoZWFkZXJfdGltZW91dF9zZXQ6MTsKIAogICAgIHVuc2lnbmVkICAgICAgICAgICAgIHByb3h5OjE7CkBAIC0zMjAsOSArMzIyLDYgQEAKICNlbmRpZgogICAgIHVuc2lnbmVkICAgICAgICAgICAgIHBpcGVsaW5lOjE7CiAKLSAgICAvKiBjYW4gd2UgdXNlIHNlbmRmaWxlID8gKi8KLSAgICB1bnNpZ25lZCAgICAgICAgICAgICBzZW5kZmlsZToxOwotCiAgICAgdW5zaWduZWQgICAgICAgICAgICAgcGxhaW5faHR0cDoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgIGNodW5rZWQ6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICBoZWFkZXJfb25seToxOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHkuYyBiL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5LmMKaW5kZXggOGNkOWQwYi4uZDg0NmIwYiAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHkuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eS5jCkBAIC0zMzMsOCArMzMzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobiA9PSBOR1hfQUdBSU4gfHwgbiA8IChzc2l6ZV90KSBzaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRzdC0+d3JpdGUtPmF2YWlsYWJsZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KGRzdC0+d3JpdGUsIE5HWF9MT1dBVF9FVkVOVCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5neF9oYW5kbGVfd3JpdGVfZXZlbnQoZHN0LT53cml0ZSwgLyogVE9ETzogTE9XQVQgKi8gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ltYXBfcHJveHlfY2xvc2Vfc2Vzc2lvbihzKTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9lcnJuby5jIGIvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmMKaW5kZXggMGQwM2ZhOS4uMmZhZjYzYSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmMKQEAgLTQ5LDcgKzQ5LDggQEAKICAgICBzdHIgPSBzdHJlcnJvcl9yKGVyciwgZXJyc3RyLCBzaXplKTsKIAogICAgIGlmIChzdHIgIT0gZXJyc3RyKSB7Ci0gICAgICAgIHJldHVybiBuZ3hfY3B5c3RybihlcnJzdHIsIHN0ciwgc2l6ZSkgLSAodV9jaGFyICopIGVycnN0cjsKKyAgICAgICAgcmV0dXJuIG5neF9jcHlzdHJuKCh1X2NoYXIgKikgZXJyc3RyLCAodV9jaGFyICopIHN0ciwgc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAodV9jaGFyICopIGVycnN0cjsKICAgICB9CiAKICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKSB7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZC5oIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2QuaAppbmRleCA5Yzg5MTA1Li43YTFlMjAzIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZC5oCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkLmgKQEAgLTExLDcgKzExLDYgQEAKIG5neF9jaGFpbl90ICpuZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3QgbGltaXQpOwogCi0KIGV4dGVybiBpbnQgbmd4X2ZyZWVic2Rfa2Vybl9vc3JlbGRhdGU7CiBleHRlcm4gaW50IG5neF9mcmVlYnNkX2h3X25jcHU7CiBleHRlcm4gaW50IG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2U7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCmluZGV4IGY0NjE2ZGIuLjc5NjFhM2IgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCkBAIC0zNCwxMyArMzQsMTMgQEAKIAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gICAgICAgIC8qIFRDUF9OT0RFTEFZLCBUQ1BfTk9QVVNIICovCiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KIAogI2luY2x1ZGUgPGxpYnV0aWwuaD4gICAgICAgICAgICAvKiBzZXRwcm9jdGl0bGUoKSBiZWZvcmUgNC4xICovCiAjaW5jbHVkZSA8b3NyZWxkYXRlLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+ICAgICAgICAvKiBUQ1BfTk9QVVNIICovCiAKIAogI2lmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNDAwMDE3CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9pbml0LmMgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9pbml0LmMKaW5kZXggZGNmNDMyYi4uMzlhMDU3YiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfaW5pdC5jCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2luaXQuYwpAQCAtMTkzLDYgKzE5Myw3IEBACiAgICAgICAgIG5neF9uY3B1ID0gbmd4X2ZyZWVic2RfaHdfbmNwdTsKICAgICB9CiAKKwogICAgIHJldHVybiBuZ3hfcG9zaXhfaW5pdChsb2cpOwogfQogCkBAIC0yMjEsNSArMjIyLDYgQEAKICAgICAgICAgfQogICAgIH0KIAorCiAgICAgbmd4X3Bvc2l4X3N0YXR1cyhsb2cpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4LmggYi9zcmMvb3MvdW5peC9uZ3hfbGludXguaAppbmRleCAyNDAzNGMwLi40YThmOGYzIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfbGludXguaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfbGludXguaApAQCAtOCw2ICs4LDkgQEAKICNkZWZpbmUgX05HWF9MSU5VWF9IX0lOQ0xVREVEXwogCiAKK25neF9pbnRfdCAgbmd4X2luaXRfc2V0cHJvY3RpdGxlKG5neF9sb2dfdCAqbG9nKTsKK3ZvaWQgbmd4X3NldHByb2N0aXRsZShjaGFyICp0aXRsZSk7CisKIG5neF9jaGFpbl90ICpuZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBsaW1pdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaAppbmRleCAyYjIzNzAyLi4xMTQyN2QzIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oCkBAIC0zOSwxMyArMzksMTMgQEAKIAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gICAgICAgIC8qIFRDUF9OT0RFTEFZLCBUQ1BfQ09SSyAqLwogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CiAKICNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAgICAgICAgLyogdHpzZXQoKSAqLwogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPiAgICAgICAgLyogVENQX0NPUksgKi8KIAogCiAjaW5jbHVkZSA8bmd4X2F1dG9fY29uZmlnLmg+CkBAIC05NCw4ICs5NCwxMCBAQAogI2RlZmluZSBIQVZFX1NFTEVDVF9DSEFOR0VfVElNRU9VVCAgIDEKICNlbmRpZgogCi0KLSNkZWZpbmUgbmd4X3NldHByb2N0aXRsZSh0aXRsZSkKKyNpZm5kZWYgTkdYX1NFVFBST0NUSVRMRV9VU0VTX0VOVgorI2RlZmluZSBOR1hfU0VUUFJPQ1RJVExFX1VTRVNfRU5WICAgIDEKKyNkZWZpbmUgTkdYX1NFVFBST0NUSVRMRV9QQUQgICAgICAgICAnXDAnIAorI2VuZGlmCiAKIAogI2VuZGlmIC8qIF9OR1hfTElOVVhfQ09ORklHX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2luaXQuYwppbmRleCA0OTQ2ZTE1Li4zYzdkMzQ0IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfaW5pdC5jCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eF9pbml0LmMKQEAgLTMwLDcgKzMwLDggQEAKIAogbmd4X2ludF90IG5neF9vc19pbml0KG5neF9sb2dfdCAqbG9nKQogewotICAgIGludCAgbmFtZVsyXSwgbGVuOworICAgIGludCAgICAgbmFtZVsyXTsKKyAgICBzaXplX3QgIGxlbjsKIAogICAgIG5hbWVbMF0gPSBDVExfS0VSTjsKICAgICBuYW1lWzFdID0gS0VSTl9PU1RZUEU7CkBAIC02Myw2ICs2NCw4IEBACiAKICAgICB9CiAKKyAgICBuZ3hfaW5pdF9zZXRwcm9jdGl0bGUobG9nKTsKKwogCiAgICAgcmV0dXJuIG5neF9wb3NpeF9pbml0KGxvZyk7CiB9CkBAIC03Niw1ICs3OSw2IEBACiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGxvZywgMCwgInN5c2N0bChLRVJOX1JUU0lHTUFYKTogJWQiLAogICAgICAgICAgICAgICAgICAgbmd4X2xpbnV4X3J0c2lnX21heCk7CiAKKwogICAgIG5neF9wb3NpeF9zdGF0dXMobG9nKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jCmluZGV4IGRiYTk0OWMuLmFmZjI0MmMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYwpAQCAtMTIsMTAgKzEyLDE1IEBACiAKIHN0YXRpYyB2b2lkIG5neF9leGVjdXRlX3Byb2Mobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpkYXRhKTsKIAotbmd4X2ludF90ICAgICAgbmd4X3Byb2Nlc3Nfc2xvdDsKLW5neF9zb2NrZXRfdCAgIG5neF9jaGFubmVsOwotbmd4X2ludF90ICAgICAgbmd4X2xhc3RfcHJvY2VzczsKLW5neF9wcm9jZXNzX3QgIG5neF9wcm9jZXNzZXNbTkdYX01BWF9QUk9DRVNTRVNdOworCitpbnQgICAgICAgICAgICAgIG5neF9hcmdjOworY2hhciAgICAgICAgICAgKipuZ3hfYXJndjsKK2NoYXIgICAgICAgICAgICoqbmd4X29zX2FyZ3Y7CisKK25neF9pbnRfdCAgICAgICAgbmd4X3Byb2Nlc3Nfc2xvdDsKK25neF9zb2NrZXRfdCAgICAgbmd4X2NoYW5uZWw7CituZ3hfaW50X3QgICAgICAgIG5neF9sYXN0X3Byb2Nlc3M7CituZ3hfcHJvY2Vzc190ICAgIG5neF9wcm9jZXNzZXNbTkdYX01BWF9QUk9DRVNTRVNdOwogCiAKIG5neF9waWRfdCBuZ3hfc3Bhd25fcHJvY2VzcyhuZ3hfY3ljbGVfdCAqY3ljbGUsCkBAIC0yMzEsOCArMjM2LDIzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCisjaWYgKFNPTEFSSVMpCisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBTb2xhcmlzIGFsd2F5cyBjYWxscyB0aGUgc2lnbmFsIGhhbmRsZXIgZm9yIGVhY2ggZXhpdGVkIHByb2Nlc3MKKyAgICAgICAgICAgICAqIGRlc3BpdGUgd2FpdHBpZCgpIG1heSBiZSBhbHJlYWR5IGNhbGxlZCBmb3IgdGhpcyBwcm9jZXNzCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgaWYgKGVyciA9PSBOR1hfRUNISUxEKSB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIG5neF9jeWNsZS0+bG9nLCBlcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YWl0cGlkKCkgZmFpbGVkIik7CisgICAgICAgICAgICB9CisKKyNlbmRpZgorCiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIG5neF9jeWNsZS0+bG9nLCBlcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhaXRwaWQoKSBmYWlsZWQiKTsKKwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmggYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5oCmluZGV4IDgxNmI2YTYuLjBjZWEzMDIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaApAQCAtNTYsNiArNTYsOSBAQAogCiAjZGVmaW5lIG5neF9zY2hlZF95aWVsZCgpICBzY2hlZF95aWVsZCgpCiAKK2V4dGVybiBpbnQgICAgICAgICAgICBuZ3hfYXJnYzsKK2V4dGVybiBjaGFyICAgICAgICAgKipuZ3hfYXJndjsKK2V4dGVybiBjaGFyICAgICAgICAgKipuZ3hfb3NfYXJndjsKIAogZXh0ZXJuIG5neF9waWRfdCAgICAgIG5neF9waWQ7CiBleHRlcm4gbmd4X3NvY2tldF90ICAgbmd4X2NoYW5uZWw7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwppbmRleCA0ZDRkYjU0Li5jNDNhN2ViIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9pbnRfdCB0eXBlKTsKIHN0YXRpYyB2b2lkIG5neF9zaWduYWxfd29ya2VyX3Byb2Nlc3NlcyhuZ3hfY3ljbGVfdCAqY3ljbGUsIGludCBzaWdubyk7CiBzdGF0aWMgbmd4X3VpbnRfdCBuZ3hfcmVhcF9jaGlsZHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKLXN0YXRpYyB2b2lkIG5neF9tYXN0ZXJfZXhpdChuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tYXN0ZXJfY3R4X3QgKmN0eCk7CitzdGF0aWMgdm9pZCBuZ3hfbWFzdGVyX2V4aXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyB2b2lkIG5neF93b3JrZXJfcHJvY2Vzc19jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIHZvaWQgKmRhdGEpOwogc3RhdGljIHZvaWQgbmd4X2NoYW5uZWxfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpOwogI2lmIChOR1hfVEhSRUFEUykKQEAgLTU1LDcgKzU1LDcgQEAKIHVfY2hhciAgbWFzdGVyX3Byb2Nlc3NbXSA9ICJtYXN0ZXIgcHJvY2VzcyI7CiAKIAotdm9pZCBuZ3hfbWFzdGVyX3Byb2Nlc3NfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbWFzdGVyX2N0eF90ICpjdHgpCit2b2lkIG5neF9tYXN0ZXJfcHJvY2Vzc19jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgY2hhciAgICAgICAgICAgICAgKnRpdGxlOwogICAgIHVfY2hhciAgICAgICAgICAgICpwOwpAQCAtOTAsMTYgKzkwLDE2IEBACiAKICAgICBzaXplID0gc2l6ZW9mKG1hc3Rlcl9wcm9jZXNzKTsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPmFyZ2M7IGkrKykgewotICAgICAgICBzaXplICs9IG5neF9zdHJsZW4oY3R4LT5hcmd2W2ldKSArIDE7CisgICAgZm9yIChpID0gMDsgaSA8IG5neF9hcmdjOyBpKyspIHsKKyAgICAgICAgc2l6ZSArPSBuZ3hfc3RybGVuKG5neF9hcmd2W2ldKSArIDE7CiAgICAgfQogCiAgICAgdGl0bGUgPSBuZ3hfcGFsbG9jKGN5Y2xlLT5wb29sLCBzaXplKTsKIAogICAgIHAgPSBuZ3hfY3B5bWVtKHRpdGxlLCBtYXN0ZXJfcHJvY2Vzcywgc2l6ZW9mKG1hc3Rlcl9wcm9jZXNzKSAtIDEpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPmFyZ2M7IGkrKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBuZ3hfYXJnYzsgaSsrKSB7CiAgICAgICAgICpwKysgPSAnICc7Ci0gICAgICAgIHAgPSBuZ3hfY3B5c3RybihwLCAodV9jaGFyICopIGN0eC0+YXJndltpXSwgc2l6ZSk7CisgICAgICAgIHAgPSBuZ3hfY3B5c3RybihwLCAodV9jaGFyICopIG5neF9hcmd2W2ldLCBzaXplKTsKICAgICB9CiAKICAgICBuZ3hfc2V0cHJvY3RpdGxlKHRpdGxlKTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFsaXZlICYmIChuZ3hfdGVybWluYXRlIHx8IG5neF9xdWl0KSkgewotICAgICAgICAgICAgbmd4X21hc3Rlcl9leGl0KGN5Y2xlLCBjdHgpOworICAgICAgICAgICAgbmd4X21hc3Rlcl9leGl0KGN5Y2xlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChuZ3hfdGVybWluYXRlKSB7CkBAIC0yMzEsNyArMjMxLDcgQEAKICAgICAgICAgaWYgKG5neF9jaGFuZ2VfYmluYXJ5KSB7CiAgICAgICAgICAgICBuZ3hfY2hhbmdlX2JpbmFyeSA9IDA7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwgImNoYW5naW5nIGJpbmFyeSIpOwotICAgICAgICAgICAgbmd4X25ld19iaW5hcnkgPSBuZ3hfZXhlY19uZXdfYmluYXJ5KGN5Y2xlLCBjdHgtPmFyZ3YpOworICAgICAgICAgICAgbmd4X25ld19iaW5hcnkgPSBuZ3hfZXhlY19uZXdfYmluYXJ5KGN5Y2xlLCBuZ3hfYXJndik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobmd4X25vYWNjZXB0KSB7CkBAIC0yNDQsMTQgKzI0NCwxMCBAQAogfQogCiAKLXZvaWQgbmd4X3NpbmdsZV9wcm9jZXNzX2N5Y2xlKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21hc3Rlcl9jdHhfdCAqY3R4KQordm9pZCBuZ3hfc2luZ2xlX3Byb2Nlc3NfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewogICAgIG5neF91aW50X3QgIGk7CiAKLSNpZiAwCi0gICAgbmd4X3NldHByb2N0aXRsZSgic2luZ2xlIHdvcmtlciBwcm9jZXNzIik7Ci0jZW5kaWYKLQogICAgIG5neF9pbml0X3RlbXBfbnVtYmVyKCk7CiAKICAgICBmb3IgKGkgPSAwOyBuZ3hfbW9kdWxlc1tpXTsgaSsrKSB7CkBAIC0yNjksNyArMjY1LDcgQEAKICAgICAgICAgbmd4X3Byb2Nlc3NfZXZlbnRzKGN5Y2xlKTsKIAogICAgICAgICBpZiAobmd4X3Rlcm1pbmF0ZSB8fCBuZ3hfcXVpdCkgewotICAgICAgICAgICAgbmd4X21hc3Rlcl9leGl0KGN5Y2xlLCBjdHgpOworICAgICAgICAgICAgbmd4X21hc3Rlcl9leGl0KGN5Y2xlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChuZ3hfcmVjb25maWd1cmUpIHsKQEAgLTU0Nyw3ICs1NDMsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG5neF9tYXN0ZXJfZXhpdChuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tYXN0ZXJfY3R4X3QgKmN0eCkKK3N0YXRpYyB2b2lkIG5neF9tYXN0ZXJfZXhpdChuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgbmd4X2RlbGV0ZV9waWRmaWxlKGN5Y2xlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuaCBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmgKaW5kZXggNzFhYTE3OC4uMTZiOTgxZiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5oCkBAIC0xOSwxOSArMTksMTMgQEAKICNkZWZpbmUgTkdYX0NNRF9SRU9QRU4gICAgICAgICA1CiAKIAotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGludCAgICAgICAgICAgYXJnYzsKLSAgICBjaGFyICpjb25zdCAgKmFyZ3Y7Ci19IG5neF9tYXN0ZXJfY3R4X3Q7Ci0KLQogI2RlZmluZSBOR1hfUFJPQ0VTU19TSU5HTEUgICAwCiAjZGVmaW5lIE5HWF9QUk9DRVNTX01BU1RFUiAgIDEKICNkZWZpbmUgTkdYX1BST0NFU1NfV09SS0VSICAgMgogCiAKLXZvaWQgbmd4X21hc3Rlcl9wcm9jZXNzX2N5Y2xlKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21hc3Rlcl9jdHhfdCAqY3R4KTsKLXZvaWQgbmd4X3NpbmdsZV9wcm9jZXNzX2N5Y2xlKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21hc3Rlcl9jdHhfdCAqY3R4KTsKK3ZvaWQgbmd4X21hc3Rlcl9wcm9jZXNzX2N5Y2xlKG5neF9jeWNsZV90ICpjeWNsZSk7Cit2b2lkIG5neF9zaW5nbGVfcHJvY2Vzc19jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogCiAKIGV4dGVybiBuZ3hfdWludF90ICAgICAgbmd4X3Byb2Nlc3M7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc2V0cHJvY3RpdGxlLmMgYi9zcmMvb3MvdW5peC9uZ3hfc2V0cHJvY3RpdGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjODcwNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy91bml4L25neF9zZXRwcm9jdGl0bGUuYwpAQCAtMCwwICsxLDE0MyBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2luY2x1ZGUgPG5neF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZ3hfY29yZS5oPgorCisKKyNpZiAoTkdYX1NFVFBST0NUSVRMRV9VU0VTX0VOVikKKworLyoKKyAqIFRvIGNoYW5nZSB0aGUgcHJvY2VzcyB0aXRsZSBpbiBMaW51eCBhbmQgU29sYXJpcyB3ZSBoYXZlIHRvIHNldCBhcmd2WzFdCisgKiB0byBOVUxMIGFuZCB0byBjb3B5IHRoZSB0aXRsZSB0byB0aGUgc2FtZSBwbGFjZSB3aGVyZSB0aGUgYXJndlswXSBwb2ludHMgdG8uCisgKiBIb3dldmVyLCBhcmd2WzBdIG1heSBiZSB0b28gc21hbGwgdG8gaG9sZCBhIG5ldyB0aXRsZS4gIEZvcnR1bmF0ZWx5LCBMaW51eAorICogYW5kIFNvbGFyaXMgc3RvcmUgYXJndltdIGFuZCBlbnZpcm9uW10gb25lIGFmdGVyIGFub3RoZXIuICBTbyB3ZSBzaG91bGQKKyAqIGVuc3VyZSB0aGF0IGlzIHRoZSBjb250aW51b3VzIG1lbW9yeSBhbmQgdGhlbiB3ZSBhbGxvY2F0ZSB0aGUgbmV3IG1lbW9yeQorICogZm9yIGVudmlyb25bXSBhbmQgY29weSBpdC4gIEFmdGVyIHRoaXMgd2UgY291bGQgdXNlIHRoZSBtZW1vcnkgc3RhcnRpbmcKKyAqIGZyb20gYXJndlswXSBmb3Igb3VyIHByb2Nlc3MgdGl0bGUuCisgKgorICogVGhlIFNvbGFyaXMncyBzdGFuZGFyZCAvYmluL3BzIGRvZXMgbm90IHNob3cgdGhlIGNoYW5nZWQgcHJvY2VzcyB0aXRsZS4KKyAqIFlvdSBoYXZlIHRvIHVzZSAiL3Vzci91Y2IvcHMgLXciIGluc3RlYWQuICBCZXNpZGVzLCB0aGUgVUNCIHBzIGRvcyBub3QKKyAqIHNob3cgYSBuZXcgdGl0bGUgaWYgaXRzIGxlbmd0aCBsZXNzIHRoYW4gdGhlIG9yaWdpbiBjb21tYW5kIGxpbmUgbGVuZ3RoLgorICogVG8gYXZvaWQgaXQgd2UgYXBwZW5kIHRvIGEgbmV3IHRpdGxlIHRoZSBvcmlnaW4gY29tbWFuZCBsaW5lIGluIHRoZQorICogcGFyZW50aGVzaXMuCisgKi8KKworZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworCitzdGF0aWMgY2hhciAqbmd4X29zX2FyZ3ZfbGFzdDsKKworbmd4X2ludF90ICBuZ3hfaW5pdF9zZXRwcm9jdGl0bGUobmd4X2xvZ190ICpsb2cpCit7CisgICAgY2hhciAgICAgICAgKnA7CisgICAgc2l6ZV90ICAgICAgIHNpemU7CisgICAgbmd4X3VpbnRfdCAgIGk7CisKKyAgICBzaXplID0gMDsKKworICAgIGZvciAoaSA9IDA7IGVudmlyb25baV07IGkrKykgeworICAgICAgICBzaXplICs9IG5neF9zdHJsZW4oZW52aXJvbltpXSkgKyAxOworICAgIH0KKworICAgIGlmICghKHAgPSBuZ3hfYWxsb2Moc2l6ZSwgbG9nKSkpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBuZ3hfb3NfYXJndl9sYXN0ID0gbmd4X29zX2FyZ3ZbMF07CisKKyAgICBmb3IgKGkgPSAwOyBuZ3hfb3NfYXJndltpXTsgaSsrKSB7CisgICAgICAgIGlmIChuZ3hfb3NfYXJndl9sYXN0ID09IG5neF9vc19hcmd2W2ldKSB7CisgICAgICAgICAgICBuZ3hfb3NfYXJndl9sYXN0ID0gbmd4X29zX2FyZ3ZbaV0gKyBuZ3hfc3RybGVuKG5neF9vc19hcmd2W2ldKSArIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBlbnZpcm9uW2ldOyBpKyspIHsKKyAgICAgICAgaWYgKG5neF9vc19hcmd2X2xhc3QgPT0gZW52aXJvbltpXSkgeworCisgICAgICAgICAgICBzaXplID0gbmd4X3N0cmxlbihlbnZpcm9uW2ldKSArIDE7CisgICAgICAgICAgICBuZ3hfb3NfYXJndl9sYXN0ID0gZW52aXJvbltpXSArIHNpemU7CisKKyAgICAgICAgICAgIG5neF9jcHlzdHJuKHAsIGVudmlyb25baV0sIHNpemUpOworICAgICAgICAgICAgZW52aXJvbltpXSA9IHA7CisgICAgICAgICAgICBwICs9IHNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBuZ3hfb3NfYXJndl9sYXN0LS07CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3ZvaWQgbmd4X3NldHByb2N0aXRsZShjaGFyICp0aXRsZSkKK3sKKyAgICB1X2NoYXIgICAgICpwOworCisjaWYgKFNPTEFSSVMpCisKKyAgICBuZ3hfaW50X3QgICBpOworICAgIHNpemVfdCAgICAgIHNpemU7CisKKyNlbmRpZgorCisgICAgbmd4X29zX2FyZ3ZbMV0gPSBOVUxMOworCisgICAgcCA9IG5neF9jcHlzdHJuKCh1X2NoYXIgKikgbmd4X29zX2FyZ3ZbMF0sICJuZ2lueDogIiwKKyAgICAgICAgICAgICAgICAgICAgbmd4X29zX2FyZ3ZfbGFzdCAtIG5neF9vc19hcmd2WzBdKTsKKworICAgIHAgPSBuZ3hfY3B5c3RybihwLCAodV9jaGFyICopIHRpdGxlLCBuZ3hfb3NfYXJndl9sYXN0IC0gKGNoYXIgKikgcCk7CisKKyNpZiAoU09MQVJJUykKKworICAgIHNpemUgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IG5neF9hcmdjOyBpKyspIHsKKyAgICAgICAgc2l6ZSArPSBuZ3hfc3RybGVuKG5neF9hcmd2W2ldKSArIDE7CisgICAgfQorCisgICAgaWYgKHNpemUgPiAoc2l6ZV90KSAoKGNoYXIgKikgcCAtIG5neF9vc19hcmd2WzBdKSkgeworCisgICAgICAgIC8qCisgICAgICAgICAqIG5neF9zZXRwcm9jdGl0bGUoKSBpcyB0b28gcmFyZSBvcGVyYXRpb24gc28gd2UgdXNlCisgICAgICAgICAqIHRoZSBub24tb3B0aW1pemVkIGNvcGllcworICAgICAgICAgKi8KKworICAgICAgICBwID0gbmd4X2NweXN0cm4ocCwgKHVfY2hhciAqKSAiICgiLCBuZ3hfb3NfYXJndl9sYXN0IC0gKGNoYXIgKikgcCk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5neF9hcmdjOyBpKyspIHsKKyAgICAgICAgICAgIHAgPSBuZ3hfY3B5c3RybihwLCAodV9jaGFyICopIG5neF9hcmd2W2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9vc19hcmd2X2xhc3QgLSAoY2hhciAqKSBwKTsKKyAgICAgICAgICAgIHAgPSBuZ3hfY3B5c3RybihwLCAodV9jaGFyICopICIgIiwgbmd4X29zX2FyZ3ZfbGFzdCAtIChjaGFyICopIHApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCoocCAtIDEpID09ICcgJykgeworICAgICAgICAgICAgKihwIC0gMSkgPSAnKSc7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorCisgICAgaWYgKG5neF9vc19hcmd2X2xhc3QgLSAoY2hhciAqKSBwKSB7CisgICAgICAgIG5neF9tZW1zZXQocCwgTkdYX1NFVFBST0NUSVRMRV9QQUQsIG5neF9vc19hcmd2X2xhc3QgLSAoY2hhciAqKSBwKTsKKyAgICB9CisKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIG5neF9jeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJzZXRwcm9jdGl0bGU6IFwiJXNcIiIsIG5neF9vc19hcmd2WzBdKTsKK30KKworCisjZWxpZiAhZGVmaW5lZChuZ3hfc2V0cHJvY3RpdGxlKQorCituZ3hfaW50X3QgIG5neF9pbml0X3NldHByb2N0aXRsZShuZ3hfbG9nX3QgKmxvZykKK3sKKyAgICByZXR1cm4gTkdYX09LOworfQorCit2b2lkIG5neF9zZXRwcm9jdGl0bGUoY2hhciAqdGl0bGUpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvY2tldC5jIGIvc3JjL29zL3VuaXgvbmd4X3NvY2tldC5jCmluZGV4IGY5N2FiNDEuLjNlMTg4YmQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9zb2NrZXQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc29ja2V0LmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqIGlvY3RsKCkgYW5kIGZjbnRsKCkgYXJlIHN5c2NhbGxzIG9uIGF0IGxlYXN0IEZyZWVCU0QgMi54LCBMaW51eCAyLjIKICAqIGFuZCBTb2xhcmlzIDcuCiAgKgotICogaW9jdGwoKSBpbiBMaW51eCAyLjQgYW5kIDIuNiB1c2VzIEJLTCwgaG93ZXZlciBmY250bChGX1NFVEZMKSB1c2VzIGl0IHRvby4KKyAqIGlvY3RsKCkgaW4gTGludXggMi40IGFuZCAyLjYgdXNlcyBCS0wsIGhvd2V2ZXIsIGZjbnRsKEZfU0VURkwpIHVzZXMgaXQgdG9vLgogICovCiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXMuaCBiL3NyYy9vcy91bml4L25neF9zb2xhcmlzLmgKaW5kZXggMzZmM2NiOS4uNzA1Y2Q1NyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXMuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpcy5oCkBAIC04LDYgKzgsMTAgQEAKICNkZWZpbmUgX05HWF9TT0xBUklTX0hfSU5DTFVERURfCiAKIAorbmd4X2ludF90ICBuZ3hfaW5pdF9zZXRwcm9jdGl0bGUobmd4X2xvZ190ICpsb2cpOwordm9pZCBuZ3hfc2V0cHJvY3RpdGxlKGNoYXIgKnRpdGxlKTsKKworCiBuZ3hfY2hhaW5fdCAqbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9jaGFpbl90ICppbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3QgbGltaXQpOwogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2NvbmZpZy5oCmluZGV4IDZjYmZjYzIuLjk2YzExOWMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2NvbmZpZy5oCkBAIC00MCwxMCArNDAsMTAgQEAKIAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gICAgICAgIC8qIFRDUF9OT0RFTEFZICovCiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KIAotI2luY2x1ZGUgPHN5cy9zZW5kZmlsZS5oPgogI2luY2x1ZGUgPHN5cy9zeXN0ZW1pbmZvLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+ICAgICAgICAgICAgIC8qIElPVl9NQVggKi8KICNpbmNsdWRlIDxpbnR0eXBlcy5oPgpAQCAtNjQsNiArNjQsMTEgQEAKICNlbmRpZgogCiAKKyNpZiAoSEFWRV9TRU5ERklMRSkKKyNpbmNsdWRlIDxzeXMvc2VuZGZpbGUuaD4KKyNlbmRpZgorCisKICNpZiAoSEFWRV9BSU8pCiAjaW5jbHVkZSA8YWlvLmg+CiAjZW5kaWYKQEAgLTgwLDcgKzg1LDE2IEBACiAjZW5kaWYKIAogCi0jZGVmaW5lIG5neF9zZXRwcm9jdGl0bGUodGl0bGUpCisjaWZuZGVmIEhBVkVfU09fU05ETE9XQVQKKy8qIHNldHNvY2tvcHQoU09fU05ETE9XQVQpIHJldHVybnMgZXJyb3IgIk9wdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIiAqLworI2RlZmluZSBIQVZFX1NPX1NORExPV0FUICAgICAgICAgMAorI2VuZGlmCisKKworI2lmbmRlZiBOR1hfU0VUUFJPQ1RJVExFX1VTRVNfRU5WCisjZGVmaW5lIE5HWF9TRVRQUk9DVElUTEVfVVNFU19FTlYgIDEKKyNkZWZpbmUgTkdYX1NFVFBST0NUSVRMRV9QQUQgICAgICAgJyAnCisjZW5kaWYKIAogCiAjZW5kaWYgLyogX05HWF9TT0xBUklTX0NPTkZJR19IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfaW5pdC5jCmluZGV4IGE3NDNhYjUuLmM2NzExOTcgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2luaXQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19pbml0LmMKQEAgLTUzLDYgKzUzLDkgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKKyAgICBuZ3hfaW5pdF9zZXRwcm9jdGl0bGUobG9nKTsKKworCiAgICAgcmV0dXJuIG5neF9wb3NpeF9pbml0KGxvZyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX3NlbmRmaWxldl9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMKaW5kZXggYTA2MGRhYy4uOTQzMGRjMCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMKQEAgLTMyLDYgKzMyLDEwIEBACiAgICAgICAgIHJldHVybiBpbjsKICAgICB9CiAKKyAgICBpZiAoIWMtPnNlbmRmaWxlKSB7CisgICAgICAgIHJldHVybiBuZ3hfd3JpdGV2X2NoYWluKGMsIGluLCBsaW1pdCk7CisgICAgfQorCiAgICAgc2VuZCA9IDA7CiAgICAgY29tcGxldGUgPSAwOwogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3Byb2Nlc3MuYyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5jCmluZGV4IDdlYzQ2ZjYuLjA2MmM0MWMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5jCkBAIC04LDYgKzgsMTEgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKK2ludCAgICAgICAgICAgIG5neF9hcmdjOworY2hhciAgICAgICAgICoqbmd4X2FyZ3Y7CitjaGFyICAgICAgICAgKipuZ3hfb3NfYXJndjsKKworCiBuZ3hfcGlkX3Qgbmd4X2V4ZWN1dGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfZXhlY19jdHhfdCAqY3R4KQogewogICAgIHJldHVybiAvKiBTVFVCICovIDA7CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3Byb2Nlc3MuaCBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCmluZGV4IDQwMmYzMWYuLmI5YjRhZWIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCkBAIC0zMiw4ICszMiwxMSBAQAogI2RlZmluZSBuZ3hfc2NoZWRfeWllbGQoKSAgU2xlZXAoMCkKIAogCitleHRlcm4gaW50ICAgICAgICAgICAgbmd4X2FyZ2M7CitleHRlcm4gY2hhciAgICAgICAgICoqbmd4X2FyZ3Y7CitleHRlcm4gY2hhciAgICAgICAgICoqbmd4X29zX2FyZ3Y7CiAKLWV4dGVybiBuZ3hfcGlkX3QgICAgIG5neF9waWQ7CitleHRlcm4gbmd4X3BpZF90ICAgICAgbmd4X3BpZDsKIAogCiAjZW5kaWYgLyogX05HWF9QUk9DRVNTX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3Byb2Nlc3NfY3ljbGUuYyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jCmluZGV4IGQ1OTcxNzQuLjg0M2MzMTEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jCkBAIC0zOCw3ICszOCw3IEBACiAKIAogCi12b2lkIG5neF9tYXN0ZXJfcHJvY2Vzc19jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tYXN0ZXJfY3R4X3QgKmN0eCkKK3ZvaWQgbmd4X21hc3Rlcl9wcm9jZXNzX2N5Y2xlKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIDAsICJtYXN0ZXIgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIik7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAKIH0KIAogCi12b2lkIG5neF9zaW5nbGVfcHJvY2Vzc19jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tYXN0ZXJfY3R4X3QgKmN0eCkKK3ZvaWQgbmd4X3NpbmdsZV9wcm9jZXNzX2N5Y2xlKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBuZ3hfaW50X3QgIGk7CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5oIGIvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmgKaW5kZXggMTBkNjg1MC4uZTgwYWYwYSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmgKQEAgLTEyLDIxICsxMiwxMyBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotdHlwZWRlZiBzdHJ1Y3QgewotICAgICBuZ3hfZmlsZV90ICAgIHBpZDsKLSAgICAgdV9jaGFyICAgICAgICpuYW1lOwotICAgICBpbnQgICAgICAgICAgIGFyZ2M7Ci0gICAgIGNoYXIgKmNvbnN0ICAqYXJndjsKLX0gbmd4X21hc3Rlcl9jdHhfdDsKLQotCiAjZGVmaW5lIE5HWF9QUk9DRVNTX1NJTkdMRSAgIDAKICNkZWZpbmUgTkdYX1BST0NFU1NfTUFTVEVSICAgMQogI2RlZmluZSBOR1hfUFJPQ0VTU19XT1JLRVIgICAyCiAKIAotdm9pZCBuZ3hfbWFzdGVyX3Byb2Nlc3NfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbWFzdGVyX2N0eF90ICpjdHgpOwotdm9pZCBuZ3hfc2luZ2xlX3Byb2Nlc3NfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbWFzdGVyX2N0eF90ICpjdHgpOwordm9pZCBuZ3hfbWFzdGVyX3Byb2Nlc3NfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3ZvaWQgbmd4X3NpbmdsZV9wcm9jZXNzX2N5Y2xlKG5neF9jeWNsZV90ICpjeWNsZSk7CiAKIAogZXh0ZXJuIG5neF91aW50X3QgICAgICBuZ3hfcHJvY2VzczsK